कुछ भी अपेक्षित तुलना ऑपरेटरों है कि (=,> =, < =, आदि) में परिभाषित किया Select Case
के लिए निष्पक्ष खेल है। सही (या गलत तरीके से), संदर्भों की तुलना VB में =
से नहीं की जाती है; किसी को Is
का उपयोग करना चाहिए। (या Object.Equals(objA As Object, objB As Object)
- लेकिन, वास्तव में, इसलिए जब आप Is
मिल गया है?)
लेकिन Object equality behaves different in .NET पर एक नज़र डालें - शायद वीबी तरह से कम भ्रामक है? जो भी हो, मुझे लगता है कि अगर आप Select Case
Is
नहीं करते हैं तो आप if-ElseIf सीढ़ी से फंस गए हैं। (अच्छी तरह से, यह होता है, लेकिन यह है कि अधिक हाइपर कार्ड के it
की तरह एक अलग Is
है,।) मैं सीढ़ी का पालन करने को सहज और आसान लग रहा है लगता है:
If sender Is StyleBoldButton Then
ElseIf sender Is StyleUnderButton Then
ElseIf sender Is StyleItalicButton Then
Else
End If
आप ने बताया है के रूप में, Select Case True
पैटर्न है एक " OrElse "वीबी 6 में शॉर्ट-सर्किट वर्कअराउंड - वास्तविक आवश्यकता को पूरा करने के लिए एक शानदार तरीका। लेकिन वीबी.नेट में इसकी आवश्यकता नहीं है। उस भावना में, शायद ऑब्जेक्ट उन्मुख भाषा की अपेक्षा की जाने वाली सर्वोत्तम प्रथाओं के अनुरूप डिजाइन पैटर्न का उपयोग करना बेहतर होगा। उदाहरण के लिए, डेनिस ट्रॉलर ने सुझाव दिया, क्यों प्रत्येक बटन को अपना ईवेंट हैंडलर न दें?
लेकिन अगर आप एक Is-सक्षम करें की तरह कुछ पर जोर देते हैं, यहाँ कुछ मैं शायद अपने आप का उपयोग नहीं होगा है:
With sender
If .Equals(StyleBoldButton) Then
ElseIf .Equals(StyleUnderButton) Then
ElseIf .Equals(StyleItalicButton) Then
Else
End If
End With
यहाँ मैं सी #
==
की तरह काम करने के लिए जब का सामना करना पड़
.Equals
पर भरोसा कर रहा हूँ
तुलना करने के लिए दो object
प्रकार (http://visualstudiomagazine.com/articles/2011/02/01/equality-in-net.aspx देखें)। इसकी सुंदरता यह है कि sender
का उल्लेख केवल एक बार किया गया है; हालांकि यह सब ElseIf .Equals(...) Then
है, आपको प्रत्येक "केस" के लिए टाइप करना होगा।
एक और तरीका है मैं अपने आप को GetHashCode()
उपयोग कर रहा है का उपयोग करेगा नहीं:
Select Case sender.GetHashCode()
Case StyleBoldButton.GetHashCode()
Case StyleUnderButton.GetHashCode()
Case StyleItalicButton.GetHashCode()
Case Else
End Select
यहाँ मैं क्या (बहुत) छोटे मैं GetHashCode()
के बारे में पता विशिष्ट (पर्याप्त) इन नियंत्रणों की पहचान करने पर भरोसा कर रहा हूँ। (Default implementation for Object.GetHashCode() देखें)।
शायद बहुरूपता का उपयोग करके एक बेहतर तरीका है। यह क्या है कि आप आखिरकार 'प्रेषक' के साथ कर रहे हैं? हो सकता है कि आप उस कार्यक्षमता को उस एकल ऑपरेशन में अमूर्त कर सकें जो प्रत्येक प्रकार के बटन पर काम करेगी? तो आपको 'चयन' की आवश्यकता नहीं होगी, लेकिन इस प्रकार के बावजूद उस ऑपरेशन को निष्पादित करेगा? – David
'अगर प्रेषक स्टाइल बोल्डबटन ElseIf है .... अंत यदि '? संभवतया देखने के लिए सुंदर नहीं, शायद अधिक समझने योग्य हां, चूंकि 'केस का चयन करें' चाल का उपयोग AFAIK VB.NET –
@ डेविड मम्मह में व्यापक रूप से उपयोग नहीं किया जाता है ... मुझे प्रत्येक बटन के लिए एक अलग चर सेट करने की आवश्यकता है। लेकिन बोल्ड और इटालिक बूलियन हैं, जबकि अंडरलाइन एक उत्साही प्रकार है। – Teejay