VB.NET की छिपी विशेषताएं?


121

मैंने C # के हिडन फीचर्स के जरिए काफी ब्राउजिंग सीखी है और जब मुझे VB.NET के लिए ऐसा कुछ नहीं मिला तो मैं हैरान रह गया।

तो इसकी कुछ छिपी या कम ज्ञात विशेषताएं क्या हैं?

जवाबों:


128

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

9
उपयोगी है यदि आप एक विशिष्ट SQLException को पकड़ना चाहते हैं, तो -2 कहें जो मुझे सही ढंग से याद है नेटवर्क टाइमआउट: कैच एक्सक्लूसिव के रूप में कैच करें जहां ex.code = -2
पॉन्डिडम

वाह! मैं अभी इसे पढ़ता हूं और इसे तुरंत उपयोग करने के लिए डालता हूं एक कोशिश / कैच ब्लॉक को आसान बनाने के लिए जिसे मैंने पिछले हफ्ते लिखा था। मैं कभी भी नया नहीं था।
जॉन एम गेंट

1
+1 और यहां नेट नेट टीम ब्लॉग बताता है कि अपवाद फ़िल्टर क्यों उपयोगी हैं blogs.msdn.com/clrteam/archive/2009/02/05/…
MarkJ

5
न केवल यह छिपा हुआ है, बल्कि यह C # में भी उपलब्ध नहीं है।
चेसो

82

रिवाज 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
कोनराड रुडोल्फ

छिपी हुई उपयोगी विशेषता उपयोग की सूची के साथ कहीं है? चेहरे पर यह एक अविश्वसनीय लगता है, लेकिन मुझे अभी तक यकीन नहीं है कि मैं इसका उपयोग कहां करूंगा या अगर यह कुछ मामलों में एक प्राथमिक पकड़ को हल कर सकता है, जिसमें कोई ऐसी क्षमता नहीं है जिसके पास एक सामान्य ज्ञान है।
मास्लो

@ मास्लो: यहाँ विशेषता शामिल नहीं है। यह एक xml टिप्पणी है।
जोएल कोएहॉर्न

49

क्या आपने लाइक तुलना ऑपरेटर की तरह देखा है?

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*"

3
रुको क्या? यह मेरे लिए नया है! हम्म, कि VB.NET स्ट्रिंग हेरफेर के साथ विकल्प की तुलना में एक हेलुवा बहुत बेहतर है: डी
एसटीडब्ल्यू

.. !! मुझे नहीं पता था कि हालांकि मैंने कई vb.net परियोजनाओं पर काम किया है! दिलचस्प विशेषता ...
मेटा-नाइट

woooooooooooooooooooooooow! धन्यवाद! यह विस्मयकारी है! यह Elinq, DLinq में भी काम करता है? XLinq के बारे में क्या?
शिमी वेइटहैंडलर

@dotjoe हम्म? इन ग्लब्स के बारे में 'आलसी' कुछ नहीं है।
जोश ली

यह कैसे प्रदर्शन करता है, हुड के तहत क्या हो रहा है? क्या यह reg पूर्व पुस्तकालयों के लिए पर्यायवाची है?
brumScouse

48

typedefs

VB उपनामों के typedefमाध्यम से एक आदिम प्रकार जानता है Import:

Imports S = System.String

Dim x As S = "Hello"

सामान्य प्रकार के साथ संयोजन में उपयोग किए जाने पर यह अधिक उपयोगी है:

Imports StringPair = System.Collections.Generic.KeyValuePair(Of String, String)

2
कृपया उदाहरण दिखाएं कि आयात शब्द मेरे IDE में अपरिचित है।
शिम्मी वेइटहैंडलर

5
Importsयह होना चाहिए। ;-) किसी तरह, यह त्रुटि लगभग पूरे वर्ष के लिए कम हो गई है (और 28 अपवोट्स प्राप्त कर ली है)।
कोनराड रुडोल्फ

मैं हमेशा सोचता था कि मैं एक सामान्य के लिए चूक के साथ एक नया "प्रकार" कैसे बना सकता हूं! ठंडा!
ईडीलोन

3
आयात, आयात, आयात, जो भी हो! शीश, आपको लगता है कि हम इन पोस्टों को पढ़ते हैं इससे पहले कि हम उन्हें बढ़ा दें!
MarkJ

दृश्य स्टूडियो परीक्षणों में xunit का उपयोग करने के लिए बहुत ही बढ़िया हैImports Assert = xUnit.Assert
बजे

45

ओह! और XML लिटरल्स को न भूलें ।

Dim contact2 = _
        <contact>
          <name>Patrick Hines</name>
          <%= From p In phoneNumbers2 _
            Select <phone type=<%= p.Type %>><%= p.Number %></phone> _
          %>
        </contact>

यही मैं कहना चाह रहा था। वास्तव में, मैंने एक ऐसे उद्देश्य के लिए एक्सएमएल शाब्दिक का उपयोग किया है जिसमें यह उद्देश्य नहीं था। मैंने इसे जावास्क्रिप्ट का उत्पादन करने के लिए इस्तेमाल किया ... swortham.blogspot.com/2009/03/vb-2008.html
स्टीव वॉर्थम

9
अन्य बातों के अलावा, आप बदसूरत स्ट्रिंग से बचने के लिए XML लिटरल्स का उपयोग कर सकते हैं, उदाहरण के लिए जब आप स्ट्रिंग्स का उपयोग कर रहे हों, जिसमें स्वयं दोहरे उद्धरण हों। बस एक XML लिटरल और कॉल वैल्यू के अंदर स्ट्रिंग रखें, जैसे: <string>This string contains "quotes" and it's OK.</string>.Value (मुझे यह विशेष रूप से आसान लगता है जब सीएसवी फ़ाइलों को पार्स करने पर परीक्षण लिखना जहां हर क्षेत्र उद्धरण में था। मेरे द्वारा उन सभी उद्धरणों को हाथ से भागने में मज़ा नहीं आएगा। परीक्षण लाइनें।)
रयान लुनडी

2
@Kyralessa: +1, शानदार टिप्पणी। वास्तव में, यह मल्टी-लाइन स्ट्रिंग्स (एचक्यूएस एसक्यूएल स्टेटमेंट, आदि) को निर्दिष्ट करने का एक शानदार तरीका है।
हिनजी

इनलाइन XML कल्पना करने के लिए सबसे खराब VB.NET सुविधाओं में से एक है। अनसुचित तथ्य।
थॉमस

39

वस्तु आरंभीकरण वहाँ भी है!

Dim x as New MyClass With {.Prop1 = foo, .Prop2 = bar}

1
मैं विश्वास नहीं कर सकता कि वे घुंघराले ब्रेसिज़ के साथ गए थे। हमारे पास पहले से ही एक कथन है .. वे सिंटैक्स का पुन: उपयोग कर सकते थे।
सैम ऐक्स

2
मुझे पता है, यह सिर्फ आपको यह दिखाने के लिए बना है कि सड़क पर कोई पुलिस वाला नहीं है ... lol JK
Shimmy Weitzhandler

4
थि सिस क्या होता है जब सभी संकलक लेखक स्वयं सी / सी ++ प्रोग्रामर हैं। वे सी सिंटैक्स को अन्य भाषाओं में खिसकाते रहते हैं क्योंकि वे कुछ भी बेहतर होने की कल्पना नहीं कर सकते।
RBarryYoung

38

DirectCast

DirectCastएक चमत्कार है। सतह पर, यह CTypeऑपरेटर के समान काम करता है कि यह एक वस्तु को एक प्रकार से दूसरे में परिवर्तित करता है। हालाँकि, यह नियमों के बहुत कठोर सेट द्वारा काम करता है। CTypeइसलिए वास्तविक व्यवहार अक्सर अपारदर्शी होता है और यह बिल्कुल स्पष्ट नहीं है कि किस तरह का रूपांतरण निष्पादित किया जाता है।

DirectCast केवल दो अलग-अलग ऑपरेशन का समर्थन करता है:

  • मान प्रकार का अनबॉक्सिंग, और
  • कक्षा पदानुक्रम में ऊपर उठना।

कोई अन्य कलाकार काम नहीं करेगा (उदाहरण के Integerलिए ए Double) को अनबॉक्स करने की कोशिश कर रहा है और परिणामस्वरूप संकलन समय / रनटाइम त्रुटि (स्थिति पर निर्भर करता है और स्थैतिक प्रकार की जाँच से क्या पता लगाया जा सकता है)। इसलिए DirectCastजब भी संभव हो, मैं इसका उपयोग करता हूं, क्योंकि यह मेरे इरादे को सबसे अच्छी तरह पकड़ लेता है: स्थिति के आधार पर, मैं या तो ज्ञात प्रकार के मूल्य को अनबॉक्स करना चाहता हूं या एक प्रदर्शन करना चाहता हूं। कहानी का अंत।

CTypeदूसरी ओर का उपयोग करते हुए , कोड के रीडर को यह सोचकर छोड़ देता है कि प्रोग्रामर वास्तव में क्या इरादा रखता है क्योंकि यह उपयोगकर्ता-परिभाषित कोड को कॉल करने सहित सभी प्रकार के विभिन्न कार्यों को हल करता है।

यह एक छिपी हुई विशेषता क्यों है? VB टीम ने एक दिशानिर्देश 1 प्रकाशित किया है DirectCastजो कोड को समान बनाने के लिए (भले ही यह वास्तव में तेज़ हो!) के उपयोग को हतोत्साहित करता है । मेरा तर्क है कि यह एक खराब दिशानिर्देश है जिसे उलट दिया जाना चाहिए: जब भी संभव हो, DirectCastअधिक सामान्य CTypeऑपरेटर पर एहसान करें । यह कोड को अधिक स्पष्ट करता है। CTypeदूसरी ओर, केवल तभी बुलाया जाना चाहिए जब यह वास्तव में अभिप्रेत हो, अर्थात जब एक संकरा CTypeसंचालक (cf. संचालक अतिभार ) कहा जाए।


1) मैं गाइडलाइन के लिंक के साथ आने में असमर्थ हूं, लेकिन मैंने पॉल विक को इस पर ले लिया है ( VBB के मुख्य डेवलपर):

वास्तविक दुनिया में, आप शायद ही कभी अंतर को नोटिस करने जा रहे हैं, इसलिए आप अधिक लचीले रूपांतरण ऑपरेटरों जैसे CType, CIIA, आदि के साथ जा सकते हैं।


(जैक द्वारा EDIT: यहां और जानें: मुझे VB.NET में कैसे डालना चाहिए? )


मुझे वास्तव में ट्रायकास्ट () थोड़ा बेहतर लगता है। यह एक अपवाद नहीं फेंकेंगे, अगर कलाकार विफल रहता है तो कुछ भी नहीं लौटाएं। यदि आप कलाकारों को अक्सर असफल होने की उम्मीद करते हैं, तो यह टाइपोफ़ एक्स एक्स टी की तुलना में तेज़ है ... डायरेक्टकैस्ट (एक्स, टी) और निश्चित रूप से अपवाद को पकड़ने की तुलना में तेज़ है अगर डायरेक्टकैस्ट विफल रहता है।
बॉब किंग

6
DirectCast () और TryCast () एक जोड़ी के रूप में सही ढंग से उपयोग किए जाने पर अमूल्य हैं। DirectCast () का उपयोग किया जाना चाहिए, यदि ऑब्जेक्ट को कास्ट किया जा रहा है, तो हमेशा लक्ष्य प्रकार होने की उम्मीद है (यदि यह आपको एक त्रुटि नहीं मिलेगी, तो यह एक अच्छी बात है क्योंकि यह एक अप्रत्याशित स्थिति है)। ट्राइकास्ट () का उपयोग किया जाना चाहिए, यदि डाली जा रही वस्तु लक्ष्य प्रकार की हो सकती है, या कई लक्ष्य प्रकार की हो सकती है। एक या दूसरे का उपयोग करने से विशेष रूप से अतिरिक्त ओवरहेड हो जाएगा (यदि टाइपो x y है तो डायरेक्टकास्ट (x, y) अक्षम है) या वैध त्रुटियों से बचने के लिए (ट्राइकास्ट () उन मामलों के लिए जहां ऑब्जेक्ट हमेशा लक्ष्य प्रकार होना चाहिए )
STW

Yoooder: 100% सही है। यह एक शर्म की बात है TryCastजिसका मैंने तब जिक्र नहीं किया था क्योंकि मेरे पास मुख्य रूप से इसका व्यापक उपयोग करने के लिए एक हड्डी थी CType
कोनराड रुडोल्फ

@ मैस्लो: निश्चित रूप से यह नहीं है, क्योंकि Enums मूल्य प्रकार हैं और TryCastकेवल प्रलेखन के अनुसार संदर्भ प्रकारों पर काम करता है।
कोनराड रुडोल्फ

+1: हेह। मुझे स्वीकार करना पड़ा है, मैंने अभी इसे पढ़ा और सोचा "ओह, हाँ, डायरेक्टकैस्ट, मैं उस बारे में कैसे भूल गया?" और फिर मैंने इसे अपनी अगली पंक्ति के कोड पर उपयोग किया (जैसा कि मैं वास्तव में CType को नापसंद करता हूं)।
RBarryYoung

37

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)

अच्छा, मुझे यह नहीं पता था! मैंने कल ही IIF का उपयोग किया था इसलिए मैं उस कोड ब्लॉक को फिर से जारी करने जा रहा हूं।
शॉन गॉफ़

4
बता दें कि वीएस 2005। हम सभी को नवीनतम और महानतम के साथ काम करने के लिए नहीं मिलता है।
सैम इरविन

3
@ बहुत, बकवास। यह तरीका 100% सुरक्षित है और यह उसी प्रकार की वस्तु देता है जैसे कि इसका (दूसरा और तीसरा) तर्क। इसके अतिरिक्त, तर्कों के बीच एक व्यापक रूपांतरण होना चाहिए, अन्यथा एक संकलित त्रुटि होगी क्योंकि प्रकार मेल नहीं खाते हैं।
कोनराड रुडोल्फ

1
हां, इसका IIf () जो सुरक्षित नहीं है
Pondidum

2
@ Br.Bill वास्तव में, यह पूरी तरह से C और पर्ल के :?ऑपरेटर के बराबर है , यह केवल एक सरलीकृत संस्करण नहीं है।
कोनराड रुडोल्फ

32

यह एक अच्छा है। 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

5
वास्तव में आप एक जोड़े से चूक गए: एक) "केस केस ट्रू" का उपयोग करने के लिए एक से अधिक वेरिएबल का परीक्षण करें, ख) "केस ए, बी, ..." फॉर्म, और यहां तक ​​कि सी) का उपयोग ":" में " स्थिति क्लॉज के साथ निष्पादन विवरण को पंक्तिबद्ध करें (हालांकि कई इसे पसंद नहीं करते हैं)।
RBarryYoung

6
कृपया केस ट्रू का उपयोग न करें। बस एक if स्टेटमेंट का उपयोग करें।
रयान लुनडी

4
मुझे लगता है कि चयन केस सच एक विशाल ifelse बयान की तुलना में पढ़ने के लिए बहुत आसान है।
dwidel

इसके साथ परेशानी Select Case Trueयह है कि ऐसा लगता है जैसे यह प्रत्येकCase कथन का मूल्यांकन करता है और प्रत्येक के लिए कोड चलाता है जो कि सत्य है। लेकिन वास्तव में यह उन्हें एक-एक करके मूल्यांकन करता है और केवल पहले एक के लिए कोड चलाता है जो कि सच है। Ifइस संबंध में वाक्य रचना बहुत स्पष्ट है ( If...Else If...Else If...Else)।
रयान लूनी

31

एक प्रमुख समय बचाने के लिए मैं हर समय का उपयोग करता है खोजशब्द के साथ है :

With ReallyLongClassName
    .Property1 = Value1
    .Property2 = Value2
    ...
End With

मुझे सिर्फ इतना लिखना पसंद नहीं है जितना मुझे करना है!


लेकिन यह कुछ छिपे हुए कीड़े भी पैदा करता है, खासकर जब आपके साथ
वरुण महाजन

2
मुझे यह भी नहीं पता था कि आप एक मौजूदा के साथ एक नया साथ रख सकते हैं। यह सिर्फ मैला है!
बॉब किंग

2 याकूब: यह मैला नहीं है, मेरा सुझाव है .. यह सिर्फ एक भाषा निर्माण है जिसका उपयोग देखभाल के साथ किया जाना है। क्रमिक लाइनों में बहुत सारी संपत्तियां स्थापित करने के लिए, यह बहुत अच्छा है, लेकिन कोड के एक जटिल टुकड़े में एक यादृच्छिक .Foo ढूंढना और फिर उपरोक्त कथन एक्स लाइनों के साथ शिकार करना सुविधा का अच्छा उपयोग नहीं है।
क्रिस

2
काश C # यह है? या मैं सो रहा हूँ और यह है कि C # हिडन-फीचर्स के उत्तर पहले से ही ...? ;-)
peSHIr

1
@ बू: आप सही हैं लेकिन यह अभी भी एक झुंझलाहट है कि आप इसे वॉच सूची में नहीं जोड़ सकते।
मेटा-नाइट

31

सबसे अच्छा और आसान CSV पार्सर:

Microsoft.VisualBasic.FileIO.TextFieldParser

Microsoft.VisualBasic का संदर्भ जोड़कर, इसे किसी अन्य .Net भाषा, जैसे C # में उपयोग किया जा सकता है।


5
+1 यह अजीब है कि कैसे C # लोग इस पर विचार किए बिना FileHelpers पर चलते हैं। मुझे यकीन है कि FileHelpers उत्कृष्ट है, लेकिन यह एक बाहरी निर्भरता है।
MarkJ

@ मर्कज मैं इसे अज्ञानता के कारण मानता हूं
नाथन कोप

मैं इस वर्ग को खोजने की कोशिश कर रहा नरक से बाहर चला गया और उसने कभी ऐसा नहीं किया, इसके लिए धन्यवाद!
पिंगू

26
  • AndAlso / OrElse तार्किक ऑपरेटर

(संपादित करें: यहां और जानें: क्या मुझे हमेशा एंडो और ऑर्लस ऑपरेटरों का उपयोग करना चाहिए? )


मैं इसे बिल्कुल भी छिपा हुआ नहीं कहूंगा, यदि संपर्क कुछ भी नहीं है और कुछ भी नहीं संपर्क करें। संपर्क करें> संपर्क करें> 0 तब करें, यदि आप उपयोग करेंगे और आपके पास एक अपवाद होगा।
शिमी वेइटहैंडलर

25

विधियों में स्थिर सदस्य।

उदाहरण के लिए:

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 

इसके अलावा, यह केवल कक्षा के साझा सदस्य के रूप में घोषित करने के समान नहीं है; इस तरह घोषित की गई वस्तुओं को थ्रेड-सुरक्षित होने की गारंटी दी जाती है। इस परिदृश्य में कोई फर्क नहीं पड़ता क्योंकि अभिव्यक्ति कभी नहीं बदलेगी, लेकिन कुछ अन्य हैं जहां यह हो सकता है।


1
इसका एक उपयोग काउंटर रखने के लिए है जो हर बार विधि को कहा जाता है। यदि चर स्टेटिक के रूप में चिह्नित है, तो इसे प्रत्येक विधि कॉल पर पुनर्निवेशित नहीं किया जाएगा; यह केवल पहली कॉल पर आरंभीकृत किया जाएगा, और उसके बाद इसके मूल्य को बनाए रखेगा।
रयान लुनडी

यही कारण है कि स्थैतिक वर्ग के सदस्यों को VB.NET में "साझा" नाम दिया गया है
एनरिको कैम्पिडोग्लियो

VB.NET में Static ख़राब रूप है, इससे भी ज्यादा क्लासिक VB में था। जब भी और जहाँ भी संभव हो स्थैतिक चर से बचा जाना चाहिए।
सैम ऐक्स

6
@ बू - यह बहुत व्यापक है। आपका औचित्य क्या है? मुझे लगता है कि स्थिर चर उपयोगी हैं।
MarkJ

4
स्टैटिक, जिसका उपयोग ऊपर दिए गए उदाहरणों में किया गया है, एनकैप्सुलेशन के एक अद्वितीय रूप की अनुमति देता है: क्लास-स्तरीय चर जिसमें विधि-स्तरीय गुंजाइश होती है। इसके बिना, आपको एक वर्ग-स्तरीय वैरिएबल बनाना होगा जो किसी भी वर्ग के सदस्य के लिए सुलभ होगा, भले ही आप इसे केवल एक विधि में उपयोग कर रहे हों।
रयान लुनडी

25

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

1
मैंने इसे एक कठिन तरीका सीखा जब कोड की एक लाख लाइनों में एक सुई खोजने की कोशिश की। नियमित बनाम पूर्णांक विभाजन। अच्छा सुझाव!
जेसन इरविन

23

मुझे वास्तव में "मेरा" नामस्थान पसंद है जो विज़ुअल बेसिक 2005 में पेश किया गया था। मेरी जानकारी और कार्यक्षमता के कई समूहों का शॉर्टकट है। यह निम्नलिखित प्रकार की जानकारी के लिए त्वरित और सहज पहुँच प्रदान करता है:

  • My.Computer : कंप्यूटर से संबंधित जानकारी जैसे फ़ाइल सिस्टम, नेटवर्क, डिवाइस, सिस्टम की जानकारी, आदि तक पहुँच। यह My.Computer.Network, My.Computer.FileSystem और My सहित कई बहुत महत्वपूर्ण संसाधनों तक पहुँच प्रदान करता है। .Computer.Printers।
  • My.Application : विशेष एप्लिकेशन से संबंधित जानकारी जैसे कि नाम, संस्करण, वर्तमान निर्देशिका आदि तक पहुंच।
  • My.User : वर्तमान प्रमाणित उपयोगकर्ता से संबंधित जानकारी तक पहुंच।
  • My.Resources : संसाधन फ़ाइलों में सशक्त रूप से टाइप किए गए एप्लिकेशन में रहने वाले संसाधनों तक पहुंच।
  • My.Settings : एक दृढ़ता से टाइप किए गए तरीके से एप्लिकेशन की कॉन्फ़िगरेशन सेटिंग्स तक पहुंच।

यह सिर्फ महान है और हर vb.net आदमी को मेरे नाम स्थान में सामान जानना चाहिए, यह बहुत उपयोगी है।
डॉ। बुराई

मेरी। * FTW :)।
डॉ। बुराई

3
यह उपयोगी है, लेकिन मैं नाम के नीचे गूंगा से नफरत करता हूं। इस secretgeek.net/refactvb.asp
MarkJ

23

कस्टम ईवेंट

हालांकि शायद ही कभी उपयोगी, घटना से निपटने के लिए अनुकूलित किया जा सकता है:

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

अच्छा लगता है, लेकिन अगर मुझे कभी भी इसकी आवश्यकता है तो मुझे लगता है कि मैंने कुछ गलत किया होगा;; यह सिर्फ KISS सिद्धांत के खिलाफ लगता है।
chrissie1

4
यह वास्तव में उपयोगी है, जब आप यह सुनिश्चित करना चाहते हैं कि प्रत्येक सिंक को घटना मिलती है, भले ही एक या एक से अधिक अपवाद फेंक दें।
जोनाथन एलन

एक और मूल्य (मैंने इसे सिर्फ एमएसडीएन साइट पर पढ़ा है) यदि आपकी कक्षा बहुत सारी घटनाओं को फेंकती है, तो आप इसे प्रत्येक घटना के लिए एक क्षेत्र घोषित करने के बजाय एक हैश टेबल / शब्दकोश को कंटेनर के रूप में उपयोग करने के लिए मजबूर कर सकते हैं। msdn.microsoft.com/en-us/library/8627sbea(VS.71).aspx
torial

ठंडा। मुझे लगा कि C # और VB.NET को अलग करने वाली सुविधाओं में से एक (जैसा कि एक में हो सकता है, लेकिन दूसरे में इसके लिए कोई सिंटैक्स नहीं है)। कम से कम यह जानकर अच्छा लगा कि मैं इस संबंध में गलत था।
peSHIr

21

मैं बस के बारे में बात कर एक लेख मिला! ऑपरेटर, "डिक्शनरी लुकअप ऑपरेटर" के रूप में भी जाना जाता है। यहाँ पर लेख का एक अंश दिया गया है: 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" के रूप में स्कैन किया जाएगा। सौभाग्य से, चूंकि भाषा में कोई जगह नहीं है जहां एक पंक्ति में दो पहचानकर्ता वैध हैं, हमने सिर्फ नियम पेश किया है कि यदि अगला चरित्र किसके लिए है! एक पहचानकर्ता की शुरुआत है, हम इस पर विचार करते हैं! एक ऑपरेटर होने के लिए और एक प्रकार का चरित्र नहीं।


11
यह उन विशेषताओं में से एक है, जिनका मैंने उपयोग किया, फिर जानबूझकर भूल गया। यह कुछ कीस्ट्रोक्स बचाता है लेकिन मेरे कोड हाइलाइटिंग और पठनीयता के साथ खिलवाड़ करता है। फिर से भूल गया .... अब
STW

3
दिलचस्प है, लेकिन वास्तव में उपयोगी नहीं है। क्या यह उसी तरह का सामान है जो वीबी टीम उपज कीवर्ड की तरह गायब सुविधाओं को जोड़ने के बजाय काम करती है? : पी
मेटा-नाइट

5
यह सुविधा VB3 (AFAIK) से पिछड़ी अनुकूलता के लिए ली गई है
एडुआर्डो मोल्टेनि

1
क्या वे कक्षाएं जो एक कुंजीकृत सूचकांक को लागू करती हैं, उनके पास एक सामान्य इंटरफ़ेस है जो उन्हें विरासत में मिला है? आईकेयड की तरह उसी तरह पूर्णांक अनुक्रमित कंटेनरों को लागू करने योग्य है?
मास्लो

2
यह फीचर DataRows (यानी डॉ। आईडी) के साथ भी काम करता है जो कि LINQ से DataSets में बहुत काम आता है।
पॉल

19

यह C # पर बिल्ट-इन और एक निश्चित लाभ है। एक ही नाम का उपयोग किए बिना एक इंटरफ़ेस विधि को लागू करने की क्षमता।

जैसे कि:

Public Sub GetISCSIAdmInfo(ByRef xDoc As System.Xml.XmlDocument) Implements IUnix.GetISCSIInfo

End Sub

मुझे यकीन है कि आप सी # में ऐसा कुछ कर सकते हैं। VB.NET में इसकी बस मजबूर है, और C # में इसके वैकल्पिक?
जेसपर ब्लैड जेन्सेन

5
आप उप को निजी भी बना सकते हैं, जो सामानों को छिपाने के लिए एक शानदार तरीका है, जैसे कि इंटरफेस के गैर-जेनेरिक वर्धित संस्करणों में कॉल।
क्रेग गिदनी

3
यह एक अच्छा विचार हो सकता है। क्लासिक उदाहरण यह होगा कि यदि आप एक सार्वजनिक क्लोज विधि चाहते हैं जो आईडीआईओएस के लिए आपके डिस्पोजल कार्यान्वयन के रूप में भी काम करती है।
MarkJ

1
यदि आप एक विधि नाम साझा करने वाले दो इंटरफेस को लागू करने के लिए भी बहुत उपयोगी हैं।
एरिक निकोलसन

मैंने यह देखा है और हमेशा इच्छा होती है कि मैं नहीं। की अनुमति नहीं दी जानी चाहिए।
FastAl

17

मजबूरन बायवाल

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

देखें प्रक्रिया कॉल द्वारा संशोधित नहीं किया जा रहा है - परिवर्तनशील पर आधारित


6
ओह मेरी अच्छाई ... यह एक उल्लेखनीय विशेषता है, हालांकि मुझे नहीं लगता कि मुझे पता होगा कि अगर मैं इसे किसी और के कोड में पढ़ता हूं तो यह क्या कर रहा है। यदि आपको यह जानने के लिए यह टिप्पणी करनी है कि यह क्या कर रहा है, तो हो सकता है कि आपने इसके बजाय फेंकने के लिए दूर का चर बना दिया हो।
मैटमैक्स 3

7
यह वास्तव में कोष्ठक के उपयोग का एक साइड इफेक्ट है - कोष्ठक एक अंदर क्या है, भले ही सिर्फ एक आइटम का अस्थायी मूल्य बनाते हैं। यह प्रभाव KbED ME in vb6 - सब कॉल्स ने पार्न्स को नहीं लिया, लेकिन C से आने वाले मुझे सहज रूप से Parens लगा दिया। 6.0 ने कई मापदंडों पर धमाका किया, लेकिन एक पैरामीटर उप के लिए, यह खुशी से एक अस्थायी मान पारित कर दिया और मेरे सम्मान के लिए दोहराया गया। 'ByRef'। हर 3 साल में हुआ, पिछली घटना को भूलने में मुझे कितना समय लगा।
FastAl

16

नाम से मापदंडों को पार करना, और उन्हें फिर से व्यवस्थित करना

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")

वाह, यह शानदार है! मैंने वेब सेवाओं आदि का उपयोग करते समय इसे देखा था, लेकिन मुझे नहीं पता था कि आप इसे किसी भी सामान्य तरीके से कर सकते हैं।
रिच डिसी

2
निश्चित रूप से एक बहुत ही उपयोगी उपकरण जब आप एक विधि का सामना करते हैं जो बहुत सारे तर्क लेता है। मैं प्रत्येक पैरामीटर को नाम देने और नाम रखने का प्रयास करता हूं: = अपनी लाइन पर मान। यह उन तरीकों के लिए बहुत अधिक सहज और स्वच्छ है जो पैरामीटर> 5 (मेरे अंगूठे का नियम) लेते हैं।
एसटीडब्ल्यू

कार्यालय स्वचालन के लिए विशेष रूप से उपयोगी है, जहां आपको दर्जनों वैकल्पिक तर्कों के साथ तरीकों का सामना करना पड़ता है।
MarkJ

1
यह भी अच्छा है कि आप दो को मिला सकते हैं : आवश्यक मापदंडों को क्रम में निर्दिष्ट करके शुरू करें, फिर वैकल्पिक तर्कों के लिए नामित मापदंडों पर स्विच करें!
RBarryYoung

15

यूज़िंग स्टेटमेंट VB 8 जैसा नया है, C # में शुरू से ही था। यह आपके लिए स्वचालित रूप से डिस्पोजल कॉल करता है।

उदाहरण के लिए

Using lockThis as New MyLocker(objToLock)

End Using

23
यह ध्यान देने योग्य है (केवल इसलिए कि मैं कम से कम दो बार भूल गया हूं) आप एक का उपयोग कर सकते हैं स्टेटमेंट कई डिस्पोजेबल ऑब्जेक्ट लपेटें। वाक्यविन्यास है "नए ऑब्जेक्ट के रूप में ओब्जेए का उपयोग करना, ओब्जेबी को नई ऑब्जेक्ट के रूप में ...." यह कई यूज़िंग स्टेटमेंट्स का उपयोग करने की तुलना में बहुत अधिक क्लीनर है।
STW

निश्चित रूप से मेरे पसंदीदा में से एक।
सैम एक्स

14

आयात उपनाम भी काफी हद तक अज्ञात हैं:

Import winf = System.Windows.Forms

''Later
Dim x as winf.Form

1
मुझे लगता है कि हमारा भी यही विचार था।
chrissie1

3
@ बू - यहाँ एक सरल उदाहरण है जहाँ आयात उपनाम बुराई नहीं हैं। stackoverflow.com/questions/92869/…
छोटे जुआन

ठीक है - दुर्व्यवहार के लिए एक स्पष्ट एवेन्यू है, लेकिन @ टॉरेंट रैंट की परवाह किए बिना यह एक महान विशेषता है। हर बार जब मैं System.Text.RegularExpressions को शामिल करता हूं तो मुझे "समूह" वर्ग के साथ नाम टकराव होने का खतरा है क्योंकि यह एक सामान्य वर्ग का नाम है। उपनाम आपको पूरी तरह से अस्पष्ट कक्षाओं को पूरी तरह से उत्तीर्ण करने से रोकता है जो एक बड़ा समय बचाने वाला है और वास्तव में उपयोग किए जाने पर पठनीयता को बढ़ाता है। सुविधा महान है, लेकिन आपका विशिष्ट उदाहरण कुछ उपहास को आमंत्रित करने के लिए करता है - कहने के लिए क्षमा करें।
मटमैक्स 3

14

निम्नलिखित घटना घोषणा पर विचार करें

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


आप कभी ऐसा क्यों करना चाहेंगे? मैं एक उपयोग के मामले की कल्पना नहीं कर सकता जहाँ आपको VB में किसी ईवेंट में ग्राहकों की संख्या जानने की आवश्यकता हो।
कोनराड रुडोल्फ

कुछ परिस्थितियों में, यदि आप घटना को बढ़ाते हैं तो C # एक अपवाद को फेंक देता है और कोई हैंडलर नहीं है। VB.Net नहीं करेगा। इसलिए जांच की जरूरत है।
जोएल कोएहॉर्न

2
मैंने इसका उपयोग एक व्यवसाय वस्तु घटना के लिए किया, जिसने ग्राहकों को सत्यापन त्रुटि संदेश दिए। मैं यह देखना चाहता था कि क्या घटना को संभाला जा रहा था ताकि मुझे पता चले कि सत्यापन की त्रुटियां प्राप्त हो रही हैं। अन्यथा, मेरे पास व्यावसायिक वस्तु एक अपवाद थी।
टेक्नोबैबल

2
इस निजी सदस्य के लिए एक और उपयोगी उपयोग ईवेंट की मंगलाचरण सूची प्राप्त करना है। मैंने इसका उपयोग कई मामलों में घटना को सभी कॉलर्स के लिए एक समान रूप से आग लगाने के लिए किया है (श्रोता बी को इसे प्राप्त करने से पहले घटना को संशोधित करने से रोकता है; यह भी श्रोता A को श्रोता B को डिलीवरी में देरी से रोकता है)। मैंने कस्टम डेटा सिंक परिदृश्यों में और एपीआई में भी इसका भरपूर उपयोग किया है।
STW

14

यदि आपको किसी कीवर्ड के मिलान के लिए एक चर नाम की आवश्यकता है, तो इसे कोष्ठक के साथ संलग्न करें। नेक नहीं। सबसे अच्छा अभ्यास हालांकि - लेकिन यह बुद्धिमानी से इस्तेमाल किया जा सकता है।

जैसे

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

मुझे लगता है कि यदि आप उदाहरण कीवर्ड के रूप में "यदि" का उपयोग नहीं करते तो यह उदाहरण बेहतर होगा।
सीन गोफ

4
टाइमर।समर्थन और टाइमर। इस के अच्छे उपयोग के उदाहरण के रूप में मन में वसंत।
Pondidum

5
एक अस्वीकरण के साथ इसे इंगित करने के लिए +1। कई रूपरेखा वर्ग हैं जिन्हें सही ढंग से हल करने के लिए इसकी आवश्यकता होती है, जैसे कि [असेंबली]
एसटीडब्ल्यू

5
[एनम] एक ऐसे मामले का एक और अच्छा उदाहरण है जहां आपको कीवर्ड के बजाय कक्षा का उपयोग करने के लिए कोष्ठक की आवश्यकता होती है।
रयान लुनडी

13

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>टैग का उपयोग करने की आवश्यकता नहीं है , निश्चित रूप से; आप अपनी पसंद के किसी भी टैग का उपयोग कर सकते हैं।)


3
<q>एक अच्छा टैग होगा, जो पर्ल / रूबी में उपयोग के समान है। वैसे भी, यह काफी अच्छा मुहावरा है। पसंद!
कोनराड रुडोल्फ

क्या एक प्रतिभाशाली विचार है। धन्यवाद
जेरेमी

12

दिनांक समय को आपकी दिनांक के आसपास # के साथ प्रारंभ किया जा सकता है

Dim independanceDay As DateTime = #7/4/1776#

आप इस सिंटैक्स के साथ-साथ टाइप इंफ़ेक्शन का भी उपयोग कर सकते हैं

Dim independanceDay = #7/4/1776#

यह कंस्ट्रक्टर का उपयोग करने की तुलना में बहुत अच्छा है

Dim independanceDay as DateTime = New DateTime(1776, 7, 4)

6
नहीं अगर आपके पास ऑप्शन स्ट्रिक्ट ऑन है
danlash

12

आपके पास सिर्फ एक लाइन में 2 पंक्तियाँ हो सकती हैं। अत:

Dim x As New Something : x.CallAMethod

वाह ... मुझे लगा कि यह केवल संभव w / वर्ग और विरासत
जेसन

मत भूलनाCall (New Something).CallAMethod()
जोनाथन एलन

यह Apple पर MS-Basic से एक पकड़ है] [! अपनी दुकान में मैं गोटोस का उपयोग करने के लिए उपहास के रूप में होगा: - /
FastAl

ज्यादातर समय इसे टाला जाता है, लेकिन जहां मैं इसका इस्तेमाल करना पसंद करता हूं, वह ऐसे मामलों में होता है, जहां लाइनें वास्तव में छोटी होती हैं। उदाहरण 4: x = 22
dwidel

11

वैकल्पिक पैरामीटर

वैकल्पिक एक नया अधिभार बनाने की तुलना में बहुत आसान है, जैसे:

Function CloseTheSystem(Optional ByVal msg AS String = "Shutting down the system...")
   Console.Writeline(msg)
   ''//do stuff
End Function

1
मुझे पता नहीं था कि C # उन्हें प्राप्त करने जा रहा था। वे अच्छे हैं, लेकिन आपको केवल उनका उपयोग करने के लिए सावधान रहना होगा जहां आपको यकीन है कि कोड सी # द्वारा उपभोग नहीं किया जाएगा क्योंकि यह उनका समर्थन नहीं करता है। FxCop / कोड विश्लेषण आपको इसके बजाय विधि को अधिभारित करने के लिए बताएगा।
STW

... मुझे अभी-अभी वैकल्पिक मापदंडों के लिए एक महान उपयोग मिला, जबकि अभी भी उन्हें उत्पादन कोड से बाहर रखा गया है। मैंने अपनी साइट पर इसके बारे में एक छोटी पोस्ट लिखी: yoooder.com/wordpress/?p=62
STW

2
आह, मैं इसे बहुत घृणा करता हूं ... लेकिन ऑफिस ऑटोमेशन के लिए उपयोगी
डांस 2die

9

VB.Net में शीर्षक प्रकरण एक पुराने VB6 fxn द्वारा प्राप्त किया जा सकता है:

StrConv(stringToTitleCase, VbStrConv.ProperCase,0) ''0 is localeID

1
यह भी textinfo वर्ग में। यकीन नहीं है कि क्या नामस्थान है कि शायद सिस्टम है। कपड़ा
शॉन

आप .net भाषा के तटस्थ होने के लिए बेहतर हैं और ToTitleCase में परिवर्तित करने के लिए Globalization TextInfo वर्ग का उपयोग करते हैं। अगर आपको कोड को कभी C # में बदलने की आवश्यकता है, तो आपके पास Microsoft की आवश्यकता वाली बहुत सी छोटी-छोटी नास्तियाँ होंगी। विवादास्पद
जेरेमी

9

मापदंडों के साथ गुण

मैं कुछ 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

यह दिलचस्प है, लेकिन मुझे पूरा यकीन नहीं है कि यह कहाँ उपयोगी होगा। myObj.Something ("abc") ऐसा लगता है जैसे आप किसी प्रॉपर्टी के मुकाबले किसी फंक्शन को एक्सेस कर रहे हैं। यकीन नहीं होता कि यह आपको क्या खरीदता है।
मैटमैक्स 3

मुझे अस्पष्टता से नफरत है। यह क्या होना चाहिए एक विधि, या एक संपत्ति। कुछ रिफ्लेक्टरिंग टूल कुछ स्थितियों में भी दोनों को बनाने का सुझाव देते हैं, ऐसा लगता है कि वे भी नहीं जानते ...
brumccouse
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.