2013-09-06 8 views
10

से "केस" को छोड़ना यह वास्तव में एक समस्या नहीं है, लेकिन मेरी जिज्ञासा से अधिक है कि मैं अपने साधनों से हल नहीं कर पा रहा हूं। मैं निश्चित रूप से इस पर कोई नींद नहीं खोना होगा।"चयन करें ... केस" स्टेटमेंट

VB.NET में, स्विच बयान वाक्य रचना (के रूप में MSDN here पर प्रलेखित) है:

Select [ Case ] testexpression 
[ Case expressionlist 
    [ statements ] ] 
[ Case Else 
    [ elsestatements ] ] 
End Select 

ध्यान दें कि पहली पंक्ति में, Case, वर्ग कोष्ठक में है जिसका अर्थ है कि यह वैकल्पिक है।

और वास्तव में, निम्न उदाहरण संकलित करता है तथा एक ही तरीके से कार्यान्वित के रूप में अगर Case कीवर्ड शामिल किया गया है, कम से कम, अल्पविकसित उदाहरण में मैं कोशिश की है:

Select myIntVar 
    Case 0 
     Return "Nothing" 
    Case 1 
     Return "Just one" 
    Case Else 
     Return "Something else" 
End Select 

इसलिए मेरे सवाल के रूप में है निम्नानुसार है: सिंटैक्स के अलावा, क्या Select और Select Case के साथ स्विच स्टेटमेंट खोलने के बीच अंतर है?

+0

कोई भी जिसे मैं सोच सकता हूं। यदि 'एमएसडीएन' किसी भी चीज का जिक्र नहीं करता है तो कोई यह मान सकता है कि यह नहीं है। मुझे लगता है कि मुझे लगता है कि ... – OneFineDay

+0

दिलचस्प सवाल है, मैं शर्त लगाता हूं कि "केस" वैकल्पिक है क्योंकि ऐसा लगता है कि इसे बिना किसी सी # स्विच स्टेटमेंट के साथ लाइन करना है (शायद "केस" भाग पुराने वीबी से सिर्फ एक कैरियोवर है), और कि यह शायद सीएलआर –

+1

में किसी भी तरह से संकलित हो सकता है एक और दिलचस्प पहलू यह है कि एमएसडीएन के मुताबिक, 'केस' वैकल्पिक है, अगर आप इसे छोड़ देते हैं, तो विजुअल स्टूडियो स्वचालित रूप से इसे आपके लिए जोड़ता है। –

उत्तर

6

मैंने एक छोटा प्रयोग किया। मैं तो जैसे एक छोटे सांत्वना आवेदन बना: के रूप में ऊपर चित्र

Module Module1 

    Sub Main() 
     Dim myStr As String = GetString(1) 
    End Sub 

    Private Function GetString(myIntVar) As String 
     Select myIntVar 
      Case 0 
       Return "Nothing" 
      Case 1 
       Return "Just one" 
      Case Else 
       Return "Something else" 
     End Select 
    End Function 

End Module 

पहली बार चलाने था, और फिर मैं इसे फिर से संकलित Case कीवर्ड डालने।मैं दोनों बनाया निष्पादनयोग्य ILDasm का उपयोग कर disassembled और इस ऑनलाइन diff साइट में GetString समारोह के आईएल चिपकाया: http://www.diffchecker.com/9ef7z423

Select Case और सादे पुराने Select विशुद्ध रूप से वाक्य रचना मतभेद (इस में Select के उपयोग को छोड़कर निश्चित रूप से है की तरह मेरे लिए लग रहा है LINQ प्रश्न)।

+0

बेशक, यदि आप भाषा के बारे में कुछ सूक्ष्म व्याख्या खो रहे थे (मुझे नहीं लगता कि आप हैं, जैसा कि मेरा उत्तर इंगित करता है), तो हो सकता है कि आपने एक परिस्थिति में संकलित किया हो जहां न्युंस का खुलासा नहीं हुआ था। अर्थात। यदि ** ** ने ** अंतर किया है, तो यह कुछ बढ़त मामला हो सकता है कि आपका उदाहरण उपयोग नहीं करता है। –

+0

प्रोग्रामेटिक रूप से, VB.Net स्वचालित रूप से आपके लिए 'केस' जोड़ता है। तो निश्चित रूप से आप एक ही प्रतिक्रिया होगी। –

2

मैं कहूंगा कि कोई दो रूपों के बीच अंतर है। हालांकि, मेरा एकमात्र प्रमाण किसी भी भेद को चित्रित करने की अनुपस्थिति के माध्यम से है। भाषा संदर्भ को देखने के बजाय, देखने के लिए निश्चित स्थान Language Specification में है।

संस्करण 11 में, खंड 10.8.2 के तहत, चयन के मामले बयान चर्चा की है, और वाक्य रचना से पता चला है:

SelectStatement :: =
Select [Case] अभिव्यक्तिStatementTerminator
[केसस्टेटमेंट +]
[केसइल्सस्टेटमेन टी]
End SelectStatementTerminator

तो, यह स्पष्ट है इस खंड दोनों रूपों को कवर करता है। हालांकि, पिछले 5 पैराग्राफ (चयन केस स्टेटमेंट्स के लिए विनिर्देश की पूर्णता) में दो रूपों के बीच कोई भेद नहीं किया गया है।

संदर्भ वर्णनात्मक होने का प्रयास करता है, उदाहरण देता है, और उपयोग करता है (कभी-कभी) looser भाषा। विजुअल बेसिक कंपाइलर बनाने के लिए विशिष्टता का पालन किया जाना चाहिए। यदि पूर्व से कुछ गुम हो रहा है, तो यह सिर्फ एक चूक हो सकती है। यदि बाद वाले से कुछ गुम हो रहा है, तो यह आधिकारिक तौर पर भाषा का हिस्सा नहीं है।

0

हो सकता है कि यह सिर्फ वाक्य रचना में एक फर्क है, इस तरह के वीबी जैसी भाषाओं, और सी #

के बीच के मामले में एक स्विच बयान आदेश लूप से बाहर तोड़ने के लिए कीवर्ड को तोड़ने की आवश्यकता है।

अंतर के संदर्भ में कुछ भी प्रमुख नहीं सोच सकता ... क्षमा करें।

1

मुझे लगता है कि यह वीबी 6.0 से आता है जहां Select Case अनिवार्य था - Select अपने आप पर एक बयान नहीं था। इसका मतलब यह होगा कि यह अब VB.NET में व्यक्तिगत वरीयता के लिए नीचे है।

संपादित करें: आश्चर्यजनक रूप से, यदि आप इसे छोड़ना चुनते हैं, तो विजुअल स्टूडियो इसे स्वचालित रूप से जोड़ देगा।

संबंधित मुद्दे