2012-05-24 4 views
5

निम्नलिखित सी # मेरी विजुअल स्टूडियो 2010 के तहत compiles और रन झलकी।नया फू {ए = 1,} बग या फ़ीचर?</p> <pre><code>struct Foo { public int A; } // .. var foo = new Foo { A = 1, }; </code></pre> <p>नोट ऑब्जेक्ट प्रारंभकर्ता में अनुगामी अल्पविराम:

क्या यह कानूनी सी # है और क्या इसका कोई उपयोगी उद्देश्य है, या मैंने अभी एक (सौम्य) कंपाइलर बग मारा है?

उत्तर

9

Yes it is very much legal and useful in C# to have trailing commas and no it is not a (benign) compiler bug.

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

यह पिछली कॉमा को आपके प्रारंभकर्ता में जाने वाली वस्तुओं की एक सूची रखने के लिए एक और वर्दी आसान बनाने की अनुमति देता है समय के साथ लंबाई में परिवर्तन। उदाहरण के लिए, चूंकि आपके पास उस अल्पविराम है, अंत में एक नई वस्तु को जोड़ने में केवल एक पंक्ति संपादित करना शामिल है, और नई सामग्री जोड़ने के लिए एक अल्पविराम और दूसरी पंक्ति जोड़ने के लिए एक पंक्ति संपादित नहीं करना शामिल है।

इसके अलावा क्या हुआ अगर आप अंतिम विकल्प

enum Cars 
{ 
    Honda, 
    Hyundai, 
    //Ford 
} 

यह कष्टप्रद हो सकता है अगर बाहर टिप्पणी के लिए .NET now support trailing comma in array like python does

Food for thought: If it had no use why would it be there in the first place?

+0

यह प्रत्येक भाषा का उपयोग करने के लिए एक विशेषता है। सरणी निर्माण के लिए भी काम करता है। – Dunes

+0

अब जब आप इसे इस तरह से रखते हैं, तो यह सही समझ में आता है। जानकारी के लिए धन्यवाद! आप के बारे में टिप्पणी करते हुए: 'यदि इसका कोई उपयोग नहीं किया गया तो यह पहले स्थान पर क्यों होगा?' हम अपने शेयर कंपाइलर बग (हालांकि सी # में नहीं) देखेंगे, इसलिए जब मैं समझता हूं कि "कंपाइलर बग" है बेहद दुर्लभ घटना, मैं ** हाथ से बाहर खारिज करने के लिए ** नहीं **। –

4

जॉन स्कीट जवाब देखें बाहर टिप्पणी अंतिम आइटम एक संकलन त्रुटि के कारण :

var f = new Foo { 
    A = 1, 
// B = 4 
}; 

[Flags] 
enum Characteristics 
{ 
    None = 0, 
    Big = 1, 
// Strong = 2 
} 

var primes = new int[] { 
    2, 
    3, 
// 5 
}; 
0

हां इसका कानूनी और कोई विशिष्ट उद्देश्य नहीं है।

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