2011-11-08 12 views
23

मैं वीएस -2010 पर रीशेपर प्लगइन का उपयोग कर रहा था और मैं एक इंटरफ़ेस विधि उत्पन्न कर रहा था। ReSharper पैरामीटर नाम पर @ डाल दिया। इसका उपयोग किसके लिए किया जाता है?सी # @ विधियों के पैरामीटर के लिए संशोधक

int Count(Func<ContratoList, bool> @where); 

क्या

int Count(Func<ContratoList, bool> where); 

धन्यवाद के लिए अंतर!

+0

इस पोस्टिंग को '@' verbatim ऑपरेटर के बारे में देखें http://sanity-free.org/112/all_about_the_sign_csharp_verbatim_identifier.html – ja72

उत्तर

41

@ प्रतीक आपको एक चर नाम में reserved words का उपयोग करने की अनुमति देता है।

int @class = 1; 

void MyMethod(int @goto); 

bool @public { get; set; } 

के रूप में मार्क सही ढंग से उसकी टिप्पणी और उसके जवाब में बताया, ReSharper क्योंकि where एक Contextual Keyword है और वास्तव में एक आरक्षित शब्द है, तो आपके विधि @ बिना संकलन जाएगा वास्तव में यह करने के लिए गलत है।

+10

'जहां *** *** स्पष्ट रूप से *** एक * आरक्षित * कीवर्ड नहीं है; यह एक * प्रासंगिक * कीवर्ड है। इसका मतलब है कि असल में, प्रश्न में '@ कहां' प्राप्त होता है: बिल्कुल कुछ भी नहीं। –

+0

हाँ, आप सही हैं।यह कहता है कि मैंने जवाब में शामिल लिंक में, लेकिन मुझे लगता है कि यह प्रश्न के कारण 'कहां' के साथ समान है। मैंने आपका जवाब ऊपर उठाया है, अच्छी तरह से देखा! – Connell

+1

रिशेर्पर @ चीजों को जोड़ने के साथ अति उत्साही है। –

1

यह आपको आरक्षित शब्दों को पैराम्स के रूप में उपयोग करने की अनुमति देता है।

4

यह आपको आरक्षित कीवर्ड का उपयोग चर नामों के रूप में करने की अनुमति देता है।

3

यह किया जाता है क्योंकि 'जहां' सी # (LINQ)

4

यह इस पैरामीटर एक कीवर्ड की तरह अभिनय करना बंद कर देगा में एक संरक्षित कीवर्ड है (where अन्य बातों के साथ LINQ में एक कीवर्ड है)।

+2

यह उस स्थिति में एक कीवर्ड के रूप में कार्य नहीं करेगा। –

+0

@Marc - यह एक अच्छा बिंदु है। इसे सिर्फ एक सामान्य नियम के रूप में लागू करना होगा - संदर्भ द्वारा इसे पूरी तरह से करने की कोशिश करना मुझे लगता है कि एक चुनौती अधिक होगी। –

26

कई मायनों में, रिशेर्पर ऐसा करने में गलत है। whereप्रासंगिक कीवर्ड है, जिसका अर्थ है: यह केवल कुछ विशिष्ट परिदृश्यों (यानी LINQ) में एक कीवर्ड के रूप में कार्य करता है। संकेत दिया गया स्थिति में, यह वास्तव में कुछ भी नहीं करता है। इसे वहां एक कीवर्ड के रूप में भ्रमित नहीं किया जाएगा, जैसे कि सी # भाषा डिजाइनर सी # में कीवर्ड जोड़ते हैं, उन्हें यह सुनिश्चित करने की आवश्यकता होती है कि पूर्व-मौजूदा कोड संकलित (जहां तक ​​संभव हो) जारी रहेगा, और यह पहले सी # में कानूनी होगा।

@ के उपयोग भी confuses/कुछ उपकरण (उस्तरा, विशेष रूप से पेचीदा के बाद से उस्तरा पहले से ही @ का उपयोग करता है कोड के शुरू होने से संकेत मिलता है - जिसका अर्थ है कि एक चर का उपयोग कर @ (यानी @string) कभी कभी तुम @ की जरूरत है और आप कभी कभी के लिए @@ की आवश्यकता है - और मुझे कम से कम एक झूठी पॉजिटिव आईडीई चेतावनी का कारण हो सकता है)।

हालांकि! यदि पैरामीटर if या class आदि था, तो @if/@class आपको C# कीवर्ड के रूप में भ्रमित होने के बजाय इसे एक चर नाम के रूप में उपयोग करने की अनुमति देता है। भी एक अच्छा विचार नहीं है, नोट। लेकिन एक ही टोकन से, हम पर सभी हमारे कोड (string @name = ... आदि) को ऐसा करना शुरू नहीं करेंगे - तो यह यहां क्यों है? इसकी आवश्यकता नहीं है, और जैसा कि इस प्रश्न द्वारा प्रदर्शित किया गया है, इसमें भ्रम जोड़ा गया है।

व्यक्तिगत रूप से, हालांकि, मुझे एक पैरामीटर नाम मिलेगा जो कोई कीवर्ड या प्रासंगिक-कीवर्ड नहीं है।

+4

यह भी मूल्यवान हो सकता है कि 'जहां' केवल एक LINQ कीवर्ड नहीं है, बल्कि सामान्य प्रकार की बाधाओं के लिए भी उपयोग किया जाता है – Connell

+0

हां, डिज़ाइनर यह सुनिश्चित करने की कोशिश कर रहे हैं कि मौजूदा कोड जितना संभव हो सके तोड़ न जाए। हालांकि, मैं आश्चर्यचकित था जब एक सोमवार की सुबह मॉड्यूल ने कुछ महीनों तक छुआ नहीं, अचानक निर्माण करने से इनकार कर दिया। बाहर निकलता है, यह विधि पैरामीटर नाम के रूप में 'async' का उपयोग करता है। Morale: सप्ताह के अंत में जाने से पहले Async सीटीपी स्थापित नहीं है – Dyppl

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