मैंने C # के हिडन फीचर्स के जरिए काफी ब्राउजिंग सीखी है और जब मुझे VB.NET के लिए ऐसा कुछ नहीं मिला तो मैं हैरान रह गया।
तो इसकी कुछ छिपी या कम ज्ञात विशेषताएं क्या हैं?
मैंने C # के हिडन फीचर्स के जरिए काफी ब्राउजिंग सीखी है और जब मुझे VB.NET के लिए ऐसा कुछ नहीं मिला तो मैं हैरान रह गया।
तो इसकी कुछ छिपी या कम ज्ञात विशेषताएं क्या हैं?
जवाबों:
Exception When
खंड काफी हद तक अज्ञात है।
इस पर विचार करो:
Public Sub Login(host as string, user as String, password as string, _
Optional bRetry as Boolean = False)
Try
ssh.Connect(host, user, password)
Catch ex as TimeoutException When Not bRetry
''//Try again, but only once.
Login(host, user, password, True)
Catch ex as TimeoutException
''//Log exception
End Try
End Sub
Enum
एसवीबी की वास्तविक छिपी हुई विशेषताओं में से एक completionlist
एक्सएमएल प्रलेखन टैग है जिसे स्वयं बनाने के लिए उपयोग किया जा सकता हैEnum
विस्तारित कार्यक्षमता के साथ प्रकार । यह सुविधा C # में काम नहीं करती है, हालांकि।
मेरा हाल ही के कोड से एक उदाहरण:
'
''' <completionlist cref="RuleTemplates"/>
Public Class Rule
Private ReadOnly m_Expression As String
Private ReadOnly m_Options As RegexOptions
Public Sub New(ByVal expression As String)
Me.New(expression, RegexOptions.None)
End Sub
Public Sub New(ByVal expression As String, ByVal options As RegexOptions)
m_Expression = expression
m_options = options
End Sub
Public ReadOnly Property Expression() As String
Get
Return m_Expression
End Get
End Property
Public ReadOnly Property Options() As RegexOptions
Get
Return m_Options
End Get
End Property
End Class
Public NotInheritable Class RuleTemplates
Public Shared ReadOnly Whitespace As New Rule("\s+")
Public Shared ReadOnly Identifier As New Rule("\w+")
Public Shared ReadOnly [String] As New Rule("""([^""]|"""")*""")
End Class
अब, घोषित चर के मान को असाइन करते समय Rule
, IDE संभावित मूल्यों की IntelliSense सूची प्रदान करता है RuleTemplates
।
चूंकि यह एक ऐसी सुविधा है जो IDE पर निर्भर करती है, इसलिए यह दिखाना मुश्किल है कि जब आप इसका उपयोग करते हैं तो यह कैसा दिखता है, लेकिन मैं सिर्फ एक स्क्रीनशॉट का उपयोग करूंगा:
कार्रवाई में पूर्णता सूची http://page.mi.fu-berlin.de/krudolph/stuff/completionlist.png
वास्तव में, IntelliSense 100% के समान है जो आपको एक का उपयोग करते समय मिलता है Enum
।
friend
या उसी वर्ग का उपयोग करके इसे रोक सकते हैं : Rule
इसके बजाय RuleTemplate
।
क्या आपने लाइक तुलना ऑपरेटर की तरह देखा है?
Dim b As Boolean = "file.txt" Like "*.txt"
MSDN से अधिक
Dim testCheck As Boolean
' The following statement returns True (does "F" satisfy "F"?)'
testCheck = "F" Like "F"
' The following statement returns False for Option Compare Binary'
' and True for Option Compare Text (does "F" satisfy "f"?)'
testCheck = "F" Like "f"
' The following statement returns False (does "F" satisfy "FFF"?)'
testCheck = "F" Like "FFF"
' The following statement returns True (does "aBBBa" have an "a" at the'
' beginning, an "a" at the end, and any number of characters in '
' between?)'
testCheck = "aBBBa" Like "a*a"
' The following statement returns True (does "F" occur in the set of'
' characters from "A" through "Z"?)'
testCheck = "F" Like "[A-Z]"
' The following statement returns False (does "F" NOT occur in the '
' set of characters from "A" through "Z"?)'
testCheck = "F" Like "[!A-Z]"
' The following statement returns True (does "a2a" begin and end with'
' an "a" and have any single-digit number in between?)'
testCheck = "a2a" Like "a#a"
' The following statement returns True (does "aM5b" begin with an "a",'
' followed by any character from the set "L" through "P", followed'
' by any single-digit number, and end with any character NOT in'
' the character set "c" through "e"?)'
testCheck = "aM5b" Like "a[L-P]#[!c-e]"
' The following statement returns True (does "BAT123khg" begin with a'
' "B", followed by any single character, followed by a "T", and end'
' with zero or more characters of any type?)'
testCheck = "BAT123khg" Like "B?T*"
' The following statement returns False (does "CAT123khg" begin with'
' a "B", followed by any single character, followed by a "T", and'
' end with zero or more characters of any type?)'
testCheck = "CAT123khg" Like "B?T*"
VB उपनामों के typedef
माध्यम से एक आदिम प्रकार जानता है Import
:
Imports S = System.String
Dim x As S = "Hello"
सामान्य प्रकार के साथ संयोजन में उपयोग किए जाने पर यह अधिक उपयोगी है:
Imports StringPair = System.Collections.Generic.KeyValuePair(Of String, String)
Imports
यह होना चाहिए। ;-) किसी तरह, यह त्रुटि लगभग पूरे वर्ष के लिए कम हो गई है (और 28 अपवोट्स प्राप्त कर ली है)।
Imports Assert = xUnit.Assert
ओह! और XML लिटरल्स को न भूलें ।
Dim contact2 = _
<contact>
<name>Patrick Hines</name>
<%= From p In phoneNumbers2 _
Select <phone type=<%= p.Type %>><%= p.Number %></phone> _
%>
</contact>
<string>This string contains "quotes" and it's OK.</string>.Value
(मुझे यह विशेष रूप से आसान लगता है जब सीएसवी फ़ाइलों को पार्स करने पर परीक्षण लिखना जहां हर क्षेत्र उद्धरण में था। मेरे द्वारा उन सभी उद्धरणों को हाथ से भागने में मज़ा नहीं आएगा। परीक्षण लाइनें।)
वस्तु आरंभीकरण वहाँ भी है!
Dim x as New MyClass With {.Prop1 = foo, .Prop2 = bar}
DirectCast
DirectCast
एक चमत्कार है। सतह पर, यह CType
ऑपरेटर के समान काम करता है कि यह एक वस्तु को एक प्रकार से दूसरे में परिवर्तित करता है। हालाँकि, यह नियमों के बहुत कठोर सेट द्वारा काम करता है। CType
इसलिए वास्तविक व्यवहार अक्सर अपारदर्शी होता है और यह बिल्कुल स्पष्ट नहीं है कि किस तरह का रूपांतरण निष्पादित किया जाता है।
DirectCast
केवल दो अलग-अलग ऑपरेशन का समर्थन करता है:
कोई अन्य कलाकार काम नहीं करेगा (उदाहरण के Integer
लिए ए Double
) को अनबॉक्स करने की कोशिश कर रहा है और परिणामस्वरूप संकलन समय / रनटाइम त्रुटि (स्थिति पर निर्भर करता है और स्थैतिक प्रकार की जाँच से क्या पता लगाया जा सकता है)। इसलिए DirectCast
जब भी संभव हो, मैं इसका उपयोग करता हूं, क्योंकि यह मेरे इरादे को सबसे अच्छी तरह पकड़ लेता है: स्थिति के आधार पर, मैं या तो ज्ञात प्रकार के मूल्य को अनबॉक्स करना चाहता हूं या एक प्रदर्शन करना चाहता हूं। कहानी का अंत।
CType
दूसरी ओर का उपयोग करते हुए , कोड के रीडर को यह सोचकर छोड़ देता है कि प्रोग्रामर वास्तव में क्या इरादा रखता है क्योंकि यह उपयोगकर्ता-परिभाषित कोड को कॉल करने सहित सभी प्रकार के विभिन्न कार्यों को हल करता है।
यह एक छिपी हुई विशेषता क्यों है? VB टीम ने एक दिशानिर्देश 1 प्रकाशित किया है DirectCast
जो कोड को समान बनाने के लिए (भले ही यह वास्तव में तेज़ हो!) के उपयोग को हतोत्साहित करता है । मेरा तर्क है कि यह एक खराब दिशानिर्देश है जिसे उलट दिया जाना चाहिए: जब भी संभव हो, DirectCast
अधिक सामान्य CType
ऑपरेटर पर एहसान करें । यह कोड को अधिक स्पष्ट करता है। CType
दूसरी ओर, केवल तभी बुलाया जाना चाहिए जब यह वास्तव में अभिप्रेत हो, अर्थात जब एक संकरा CType
संचालक (cf. संचालक अतिभार ) कहा जाए।
1) मैं गाइडलाइन के लिंक के साथ आने में असमर्थ हूं, लेकिन मैंने पॉल विक को इस पर ले लिया है ( VBB के मुख्य डेवलपर):
वास्तविक दुनिया में, आप शायद ही कभी अंतर को नोटिस करने जा रहे हैं, इसलिए आप अधिक लचीले रूपांतरण ऑपरेटरों जैसे CType, CIIA, आदि के साथ जा सकते हैं।
(जैक द्वारा EDIT: यहां और जानें: मुझे VB.NET में कैसे डालना चाहिए? )
TryCast
जिसका मैंने तब जिक्र नहीं किया था क्योंकि मेरे पास मुख्य रूप से इसका व्यापक उपयोग करने के लिए एक हड्डी थी CType
।
TryCast
केवल प्रलेखन के अनुसार संदर्भ प्रकारों पर काम करता है।
If
सशर्त और मोटे ऑपरेटरमुझे नहीं पता कि आप इसे कितना छिपाएंगे, लेकिन आईआईएफ ([अभिव्यक्ति]], [मूल्य अगर सच है], [मूल्य अगर गलत है]) जैसा कि ऑब्जेक्ट फ़ंक्शन गिन सकता है।
यह इतना छिपा नहीं है जितना कि वंचित ! VB 9 में वह If
ऑपरेटर है जो बहुत बेहतर है और सी # सशर्त और मोटे ऑपरेटर के रूप में ठीक काम करता है (यह इस पर निर्भर करता है कि आप क्या चाहते हैं):
Dim x = If(a = b, c, d)
Dim hello As String = Nothing
Dim y = If(hello, "World")
एक और उदाहरण दिखाने के लिए संपादित:
यह साथ काम करेगा If()
, लेकिन इसके साथ एक अपवाद का कारण बनता हैIIf()
Dim x = If(b<>0,a/b,0)
:?
ऑपरेटर के बराबर है , यह केवल एक सरलीकृत संस्करण नहीं है।
यह एक अच्छा है। VB.Net के भीतर सेलेक्ट केस स्टेटमेंट बहुत शक्तिशाली है।
यकीन है कि वहाँ मानक है
Select Case Role
Case "Admin"
''//Do X
Case "Tester"
''//Do Y
Case "Developer"
''//Do Z
Case Else
''//Exception case
End Select
लेकिन वहाँ अधिक है ...
आप रेंज कर सकते हैं:
Select Case Amount
Case Is < 0
''//What!!
Case 0 To 15
Shipping = 2.0
Case 16 To 59
Shipping = 5.87
Case Is > 59
Shipping = 12.50
Case Else
Shipping = 9.99
End Select
और भी अधिक...
आप (हालांकि एक अच्छा विचार नहीं हो सकता है) कई चर पर बूलियन चेक करते हैं:
Select Case True
Case a = b
''//Do X
Case a = c
''//Do Y
Case b = c
''//Do Z
Case Else
''//Exception case
End Select
Select Case True
यह है कि ऐसा लगता है जैसे यह प्रत्येकCase
कथन का मूल्यांकन करता है और प्रत्येक के लिए कोड चलाता है जो कि सत्य है। लेकिन वास्तव में यह उन्हें एक-एक करके मूल्यांकन करता है और केवल पहले एक के लिए कोड चलाता है जो कि सच है। If
इस संबंध में वाक्य रचना बहुत स्पष्ट है ( If...Else If...Else If...Else
)।
एक प्रमुख समय बचाने के लिए मैं हर समय का उपयोग करता है खोजशब्द के साथ है :
With ReallyLongClassName
.Property1 = Value1
.Property2 = Value2
...
End With
मुझे सिर्फ इतना लिखना पसंद नहीं है जितना मुझे करना है!
सबसे अच्छा और आसान CSV पार्सर:
Microsoft.VisualBasic.FileIO.TextFieldParser
Microsoft.VisualBasic का संदर्भ जोड़कर, इसे किसी अन्य .Net भाषा, जैसे C # में उपयोग किया जा सकता है।
(संपादित करें: यहां और जानें: क्या मुझे हमेशा एंडो और ऑर्लस ऑपरेटरों का उपयोग करना चाहिए? )
विधियों में स्थिर सदस्य।
उदाहरण के लिए:
Function CleanString(byval input As String) As String
Static pattern As New RegEx("...")
return pattern.Replace(input, "")
End Function
उपरोक्त फ़ंक्शन में, पैटर्न नियमित अभिव्यक्ति केवल एक बार बनाई जाएगी, चाहे कितनी बार फ़ंक्शन कहा जाए।
एक और उपयोग "यादृच्छिक" का एक उदाहरण रखने के लिए है:
Function GetNextRandom() As Integer
Static r As New Random(getSeed())
Return r.Next()
End Function
इसके अलावा, यह केवल कक्षा के साझा सदस्य के रूप में घोषित करने के समान नहीं है; इस तरह घोषित की गई वस्तुओं को थ्रेड-सुरक्षित होने की गारंटी दी जाती है। इस परिदृश्य में कोई फर्क नहीं पड़ता क्योंकि अभिव्यक्ति कभी नहीं बदलेगी, लेकिन कुछ अन्य हैं जहां यह हो सकता है।
Vb में इन ऑपरेटरों के बीच एक अलग है:
/
है Double
\
है Integer
शेष अनदेखी
Sub Main()
Dim x = 9 / 5
Dim y = 9 \ 5
Console.WriteLine("item x of '{0}' equals to {1}", x.GetType.FullName, x)
Console.WriteLine("item y of '{0}' equals to {1}", y.GetType.FullName, y)
'Results:
'item x of 'System.Double' equals to 1.8
'item y of 'System.Int32' equals to 1
End Sub
मुझे वास्तव में "मेरा" नामस्थान पसंद है जो विज़ुअल बेसिक 2005 में पेश किया गया था। मेरी जानकारी और कार्यक्षमता के कई समूहों का शॉर्टकट है। यह निम्नलिखित प्रकार की जानकारी के लिए त्वरित और सहज पहुँच प्रदान करता है:
हालांकि शायद ही कभी उपयोगी, घटना से निपटने के लिए अनुकूलित किया जा सकता है:
Public Class ApplePie
Private ReadOnly m_BakedEvent As New List(Of EventHandler)()
Custom Event Baked As EventHandler
AddHandler(ByVal value As EventHandler)
Console.WriteLine("Adding a new subscriber: {0}", value.Method)
m_BakedEvent.Add(value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Console.WriteLine("Removing subscriber: {0}", value.Method)
m_BakedEvent.Remove(value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("{0} is raising an event.", sender)
For Each ev In m_BakedEvent
ev.Invoke(sender, e)
Next
End RaiseEvent
End Event
Public Sub Bake()
''// 1. Add ingredients
''// 2. Stir
''// 3. Put into oven (heated, not pre-heated!)
''// 4. Bake
RaiseEvent Baked(Me, EventArgs.Empty)
''// 5. Digest
End Sub
End Class
यह तब निम्न फैशन में परीक्षण किया जा सकता है:
Module Module1
Public Sub Foo(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("Hmm, freshly baked apple pie.")
End Sub
Sub Main()
Dim pie As New ApplePie()
AddHandler pie.Baked, AddressOf Foo
pie.Bake()
RemoveHandler pie.Baked, AddressOf Foo
End Sub
End Module
मैं बस के बारे में बात कर एक लेख मिला! ऑपरेटर, "डिक्शनरी लुकअप ऑपरेटर" के रूप में भी जाना जाता है। यहाँ पर लेख का एक अंश दिया गया है: http://panopticoncentral.net/articles/902.aspx
के लिए तकनीकी नाम! ऑपरेटर "डिक्शनरी लुकअप ऑपरेटर" है। एक शब्दकोष कोई भी संग्रह प्रकार होता है जिसे एक संख्या के बजाय एक कुंजी द्वारा अनुक्रमित किया जाता है, ठीक उसी तरह जैसे अंग्रेजी शब्द में प्रविष्टियां उस शब्द द्वारा अनुक्रमित होती हैं जिस शब्द से आप परिभाषा चाहते हैं। शब्दकोश प्रकार का सबसे सामान्य उदाहरण System.Collections.Hashtable है, जो आपको हैशटेबल में जोड़े (कुंजी, मूल्य) जोड़े और फिर कुंजियों का उपयोग करके मूल्यों को पुनः प्राप्त करने की अनुमति देता है। उदाहरण के लिए, निम्न कोड हैशटेबल में तीन प्रविष्टियाँ जोड़ता है, और कुंजी "पोर्क" का उपयोग करके उनमें से एक को देखता है।
Dim Table As Hashtable = New Hashtable
Table("Orange") = "A fruit"
Table("Broccoli") = "A vegetable"
Table("Pork") = "A meat"
Console.WriteLine(Table("Pork"))
! ऑपरेटर का उपयोग किसी भी शब्दकोश प्रकार से मूल्यों को देखने के लिए किया जा सकता है जो स्ट्रिंग्स का उपयोग करके अपने मूल्यों को अनुक्रमित करता है। के बाद पहचानकर्ता! लुकअप ऑपरेशन में कुंजी के रूप में उपयोग किया जाता है। इसलिए इसके बजाय उपरोक्त कोड लिखा जा सकता था:
Dim Table As Hashtable = New Hashtable
Table!Orange = "A fruit"
Table!Broccoli = "A vegetable"
Table!Pork = "A meat"
Console.WriteLine(Table!Pork)
दूसरा उदाहरण पूरी तरह से पहले के बराबर है, लेकिन सिर्फ एक बहुत अच्छा लग रहा है, कम से कम मेरी आंखों के लिए। मुझे पता है कि बहुत सारे स्थान हैं जहाँ! इसका उपयोग किया जा सकता है, खासकर जब यह एक्सएमएल और वेब की बात आती है, जहां बस कुछ टन संग्रह होते हैं जो स्ट्रिंग द्वारा अनुक्रमित होते हैं। एक दुर्भाग्यपूर्ण सीमा यह है कि निम्नलिखित चीज़! अभी भी एक वैध पहचानकर्ता होना चाहिए, इसलिए यदि आप कुंजी के रूप में उपयोग करना चाहते हैं, तो उसमें कुछ अमान्य पहचानकर्ता चरित्र हैं, तो आप ऐसा नहीं कर सकते! ऑपरेटर। (आप उदाहरण के लिए, "तालिका! AB $ CD = 5" नहीं कह सकते क्योंकि $ पहचानकर्ताओं में कानूनी नहीं है।) VB6 में और इससे पहले, आप अमान्य पहचानकर्ताओं (यानी "तालिका!" AB $) से बचने के लिए कोष्ठक का उपयोग कर सकते हैं। सीडी] "), लेकिन जब हमने कीवर्ड से बचने के लिए ब्रैकेट का उपयोग करना शुरू किया, तो हमने ऐसा करने की क्षमता खो दी। अधिकतर परिस्थितियों में,
वास्तव में तकनीकी पाने के लिए, x- y काम करता है यदि x में एक डिफ़ॉल्ट गुण है जो एक पैरामीटर के रूप में स्ट्रिंग या ऑब्जेक्ट लेता है। उस स्थिति में, x- y को x.DefaultProperty ("y") में बदल दिया जाता है। एक दिलचस्प पक्ष यह है कि इस सभी काम को करने के लिए भाषा के शब्दकोष में एक विशेष नियम है। ! चरित्र का उपयोग भाषा में एक प्रकार के चरित्र के रूप में भी किया जाता है, और प्रकार के अक्षर ऑपरेटरों से पहले खाए जाते हैं। तो एक विशेष नियम के बिना, x! "X! Y" के बजाय "x! Y" के रूप में स्कैन किया जाएगा। सौभाग्य से, चूंकि भाषा में कोई जगह नहीं है जहां एक पंक्ति में दो पहचानकर्ता वैध हैं, हमने सिर्फ नियम पेश किया है कि यदि अगला चरित्र किसके लिए है! एक पहचानकर्ता की शुरुआत है, हम इस पर विचार करते हैं! एक ऑपरेटर होने के लिए और एक प्रकार का चरित्र नहीं।
यह C # पर बिल्ट-इन और एक निश्चित लाभ है। एक ही नाम का उपयोग किए बिना एक इंटरफ़ेस विधि को लागू करने की क्षमता।
जैसे कि:
Public Sub GetISCSIAdmInfo(ByRef xDoc As System.Xml.XmlDocument) Implements IUnix.GetISCSIInfo
End Sub
मजबूरन बायवाल
VB में, यदि आप कोष्ठक के एक अतिरिक्त सेट में अपने तर्कों को लपेटते हैं, तो आप विधि के ByRef घोषणा को ओवरराइड कर सकते हैं और इसे ByVal में बदल सकते हैं। उदाहरण के लिए, निम्न कोड 4,5,6 के बजाय 4, 5, 5 का उत्पादन करता है
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim R = 4
Trace.WriteLine(R)
Test(R)
Trace.WriteLine(R)
Test((R))
Trace.WriteLine(R)
End Sub
Private Sub Test(ByRef i As Integer)
i += 1
End Sub
देखें प्रक्रिया कॉल द्वारा संशोधित नहीं किया जा रहा है - परिवर्तनशील पर आधारित
नाम से मापदंडों को पार करना, और उन्हें फिर से व्यवस्थित करना
Sub MyFunc(Optional msg as String= "", Optional displayOrder As integer = 0)
'Do stuff
End function
उपयोग:
Module Module1
Sub Main()
MyFunc() 'No params specified
End Sub
End Module
किसी भी क्रम में ": =" पैरामीटर विनिर्देशन का उपयोग करके भी बुलाया जा सकता है:
MyFunc(displayOrder:=10, msg:="mystring")
यूज़िंग स्टेटमेंट VB 8 जैसा नया है, C # में शुरू से ही था। यह आपके लिए स्वचालित रूप से डिस्पोजल कॉल करता है।
उदाहरण के लिए
Using lockThis as New MyLocker(objToLock)
End Using
आयात उपनाम भी काफी हद तक अज्ञात हैं:
Import winf = System.Windows.Forms
''Later
Dim x as winf.Form
निम्नलिखित घटना घोषणा पर विचार करें
Public Event SomethingHappened As EventHandler
C # में, आप निम्न सिंटैक्स का उपयोग करके ईवेंट ग्राहकों के लिए जाँच कर सकते हैं:
if(SomethingHappened != null)
{
...
}
हालाँकि, VB.NET कंपाइलर इसका समर्थन नहीं करता है। यह वास्तव में एक छिपा हुआ निजी सदस्य क्षेत्र बनाता है, जो इंटेलीसेनस में दिखाई नहीं देता है:
If Not SomethingHappenedEvent Is Nothing OrElse SomethingHappenedEvent.GetInvocationList.Length = 0 Then
...
End If
अधिक जानकारी:
http://jelle.druyts.net/2003/05/09/BehindTheScenesOfEventsInVBNET.aspx http://blogs.msdn.com/vbteam/archive/2009/09/25/testing.events-for-nothing-null-doug -rothaus.aspx
यदि आपको किसी कीवर्ड के मिलान के लिए एक चर नाम की आवश्यकता है, तो इसे कोष्ठक के साथ संलग्न करें। नेक नहीं। सबसे अच्छा अभ्यास हालांकि - लेकिन यह बुद्धिमानी से इस्तेमाल किया जा सकता है।
जैसे
Class CodeException
Public [Error] as String
''...
End Class
''later
Dim e as new CodeException
e.Error = "Invalid Syntax"
उदाहरण के लिए टिप्पणियों से (@Pondidum):
Class Timer
Public Sub Start()
''...
End Sub
Public Sub [Stop]()
''...
End Sub
XML लिटरल्स के बारे में कुछ उत्तर हैं, लेकिन इस विशिष्ट मामले के बारे में नहीं:
आप स्ट्रिंग लीटर को संलग्न करने के लिए XML लिटरल्स का उपयोग कर सकते हैं जो अन्यथा बच निकलने की आवश्यकता होगी। स्ट्रिंग शाब्दिक जिसमें दोहरे उद्धरण शामिल हैं, उदाहरण के लिए।
इसके अलावा:
Dim myString = _
"This string contains ""quotes"" and they're ugly."
तुम यह केर सकते हो:
Dim myString = _
<string>This string contains "quotes" and they're nice.</string>.Value
यदि आप CSV पार्सिंग के लिए शाब्दिक परीक्षण कर रहे हैं तो यह विशेष रूप से उपयोगी है:
Dim csvTestYuck = _
"""Smith"", ""Bob"", ""123 Anywhere St"", ""Los Angeles"", ""CA"""
Dim csvTestMuchBetter = _
<string>"Smith", "Bob", "123 Anywhere St", "Los Angeles", "CA"</string>.Value
(आपको <string>
टैग का उपयोग करने की आवश्यकता नहीं है , निश्चित रूप से; आप अपनी पसंद के किसी भी टैग का उपयोग कर सकते हैं।)
<q>
एक अच्छा टैग होगा, जो पर्ल / रूबी में उपयोग के समान है। वैसे भी, यह काफी अच्छा मुहावरा है। पसंद!
दिनांक समय को आपकी दिनांक के आसपास # के साथ प्रारंभ किया जा सकता है
Dim independanceDay As DateTime = #7/4/1776#
आप इस सिंटैक्स के साथ-साथ टाइप इंफ़ेक्शन का भी उपयोग कर सकते हैं
Dim independanceDay = #7/4/1776#
यह कंस्ट्रक्टर का उपयोग करने की तुलना में बहुत अच्छा है
Dim independanceDay as DateTime = New DateTime(1776, 7, 4)
आपके पास सिर्फ एक लाइन में 2 पंक्तियाँ हो सकती हैं। अत:
Dim x As New Something : x.CallAMethod
Call (New Something).CallAMethod()
वैकल्पिक पैरामीटर
वैकल्पिक एक नया अधिभार बनाने की तुलना में बहुत आसान है, जैसे:
Function CloseTheSystem(Optional ByVal msg AS String = "Shutting down the system...")
Console.Writeline(msg)
''//do stuff
End Function
VB.Net में शीर्षक प्रकरण एक पुराने VB6 fxn द्वारा प्राप्त किया जा सकता है:
StrConv(stringToTitleCase, VbStrConv.ProperCase,0) ''0 is localeID
मापदंडों के साथ गुण
मैं कुछ C # प्रोग्रामिंग कर रहा हूं, और एक ऐसा फीचर खोजा है जो गायब था जो VB.Net के पास था, लेकिन यहां उल्लेख नहीं किया गया था।
ऐसा करने का एक उदाहरण (साथ ही सी # सीमा) को देखा जा सकता है: सी # में विशिष्ट प्राप्त सेट गुणों का उपयोग करते हुए पैरामीटर के साथ।
मैंने उस उत्तर से कोड निकाल दिया है:
Private Shared m_Dictionary As IDictionary(Of String, Object) = _
New Dictionary(Of String, Object)
Public Shared Property DictionaryElement(ByVal Key As String) As Object
Get
If m_Dictionary.ContainsKey(Key) Then
Return m_Dictionary(Key)
Else
Return [String].Empty
End If
End Get
Set(ByVal value As Object)
If m_Dictionary.ContainsKey(Key) Then
m_Dictionary(Key) = value
Else
m_Dictionary.Add(Key, value)
End If
End Set
End Property