Microsoft.CSharp.CSharpCodeGenerator
में IsKeyword(string)
विधि है जो ठीक है। हालांकि, कक्षा आंतरिक है, इसलिए आपको इसका उपयोग करने के लिए प्रतिबिंब का उपयोग करना होगा और इसकी कोई गारंटी नहीं है कि यह .NET ढांचे के भविष्य के संस्करणों में उपलब्ध होगा। कृपया ध्यान दें कि IsKeyword
सी # के विभिन्न संस्करणों का ख्याल नहीं रखता है।
सार्वजनिक विधि System.CodeDom.Compiler.ICodeGenerator.IsValidIdentifier(string)
कीवर्ड को भी अस्वीकार करता है। दोष यह है कि यह विधि कुछ अन्य मान्यताओं को भी करती है, इसलिए अन्य गैर-कीवर्ड स्ट्रिंग भी अस्वीकार कर दी जाती हैं।
अद्यतन: तुम सिर्फ यदि किसी विशेष स्ट्रिंग एक कीवर्ड है फैसला एक वैध पहचानकर्ता उत्पादन के बजाय करने की जरूरत है, तो आप उपयोग कर सकते हैं ICodeGenerator.CreateValidIdentifier(string)
। यह विधि दो अग्रणी अंडरस्कोर के साथ तारों का ख्याल रखती है और उन्हें एक और अंडरस्कोर के साथ उपसर्ग करके रखती है। कीवर्ड के लिए वही है। ध्यान दें कि ICodeGenerator.CreateEscapedIdentifier(string)
@
साइन के साथ इस तरह के स्ट्रिंग उपसर्ग।
दो प्रमुख अंडरस्कोर के साथ पहचानकर्ता शुरूआत कार्यान्वयन के लिए आरक्षित हैं (यानी सी # कंपाइलर और संबंधित कोड जेनरेटर इत्यादि), इसलिए आपके कोड से ऐसे पहचानकर्ताओं से परहेज करना आम तौर पर एक अच्छा विचार है।
अद्यतन 2: कारण ICodeGenerator.CreateEscapedIdentifier
से अधिक ICodeGenerator.CreateValidIdentifier
को पसंद करते हैं कि __x
और @__x
मूलतः एक ही पहचानकर्ता हो रहा है। निम्नलिखित संकलन नहीं:
int __x = 10;
int @__x = 20;
मामले में संकलक उत्पन्न होगा और एक __x
पहचानकर्ता का उपयोग, और उपयोगकर्ता CreateEscapedIdentifier
के लिए एक कॉल करने के लिए एक परिणाम के रूप @__x
का प्रयोग करेंगे, एक संकलन त्रुटि घटित होता। CreateValidIdentifier
का उपयोग करते समय इस स्थिति को रोका जाता है, क्योंकि कस्टम पहचानकर्ता ___x
(तीन अंडरस्कोर) में बदल जाता है।
स्रोत
2011-03-10 16:43:55
संदेह है कि देखते हैं। कारणों में से एक हो सकता है - संदर्भ विशिष्ट कीवर्ड हैं। –
... हालांकि यदि आपको संदर्भ के बारे में परवाह नहीं है, चाहे कोई स्ट्रिंग एक कीवर्ड है, तो यह एक बहुत ही सरल परीक्षण है। मुझे संदेह है कि इस तरह के परीक्षण को बनाए रखने का प्रयास मामूली से परे कुछ भी है। यहां तक कि एमएस बहुत तेजी से सी # के संस्करणों का निर्माण नहीं कर सकता है। –