2012-06-27 14 views
5

मैं परियोजना मैं हाल ही में शामिल हो गए पर कुछ कोड की समीक्षा कर रहा हूँ, और एक सी # जीत में .NET 3.5 के लिए आवेदन फॉर्म्स मैं इस पाया:एंडपॉइंट: सी # में सिंटेक्स - यह क्या है?

public void foo() 
{ 
    //Normal code for function foo. 

//This is at the end and it is left-indented just as I put it here. 
EndPoint: 
    { 
    } 
} 

जब मैं क्लिक करें "EndPoint/जाओ करने के लिए परिभाषा " यह कहती है कि " एंडपॉइंट पर नेविगेट नहीं कर सकता " लेकिन पूरी तरह से प्रोजेक्ट बहुत छोटा है और त्रुटि के बिना संकलित/चलाता है, इसलिए यह अनुपलब्ध संदर्भ या कुछ भी नहीं है।

एंडपॉइंट क्या है और नाम के साथ यह वाक्यविन्यास क्या है: {}?

+8

मूल डेवलपर को मार डालो जो इसे लिखा है, यह 'गोटो' है! –

+0

यह एक लेबल है! आपके विन फॉर्म प्रोजेक्ट में क्या कर रहा है? –

+0

पवित्र बकवास: पी मैंने सी ++ में वर्षों में उनमें से एक को नहीं देखा है। मुझे यह भी पता नहीं था कि उन्होंने उस सुविधा को सी #: पी –

उत्तर

5

इसके लिए goto। देखें: http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx

कॉलन के साथ वाक्यविन्यास उन लेबलों को निर्दिष्ट करता है जहां goto कथन नियंत्रण स्थानांतरित करेगा। आप इसे सी # में उपयोग कर सकते हैं, लेकिन अधिकांश डेवलपर्स इसे टालने के लिए जाते हैं। http://weblogs.asp.net/stevewellens/archive/2009/06/01/why-goto-still-exists-in-c.aspx

: कभी कभी यह नेस्टेड छोरों

यहाँ goto की अधिक उपयोगी प्रयोगों में से कुछ पर एक अच्छा writeup है (है कि सबसे अच्छा मैं एक "वैध" उपयोग के लिए साथ आने कर सकते हैं) को तोड़ने के लिए उपयोगी हो सकता है संपादित करें: परिभाषा पर जाने के बारे में आपको मिली त्रुटि पर टिप्पणी करने के लिए, यह समझ में आता है। लेबल के लिए कोई "परिभाषा" स्रोत नहीं है। शायद goto Endpoint; पर "परिभाषा पर जाएं" लेबल पर जा सकता है, लेकिन मुझे यकीन नहीं है - कभी कोशिश नहीं की। यदि आपके कोड में आपके पास केवल Endpoint: लेबल है लेकिन कहीं भी goto Endpoint; नहीं है, तो लेबल को हटाने के लिए सुरक्षित होना चाहिए क्योंकि (मुझे लगता है) यह पुराने कोड का एक अप्रयुक्त अवशेष है।

+0

वैसे यह एक "मामला" कथन नहीं है ; यह स्विच/केस जैसा नहीं है यदि आप यही सोच रहे हैं। –

+1

टॉच, मेरा मतलब गेटो लेबल :) आज हर जगह मेरे सिर। –

2

अन्य ने समझाया है कि EndPoint: क्या है। अतिरिक्त ब्रेसिज़ एक नया दायरा बना रहे हैं। एक आंतरिक दायरा बनाकर आप कुछ ऐसा कर सकते हैं

public Foo() 
{ 
    { 
     int bar = 10; 
     Console.WriteLine(bar); 
    } 

    Console.WriteLine(bar); //Error: "Cannot resolve symbol bar." It does not exist in this scope. 

    { 
     int bar = 20; //Declare bar again because the first bar is out of scope. 
     Console.Writeline(bar); 
    } 
} 
+0

+1 '{}' वाक्यविन्यास के संबंध में प्रश्न के बारे में भूल गया। –

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