2008-09-18 16 views
21

मैं उपयोगकर्ता मानों के आधार पर गतिशील कोड उत्पन्न करने के लिए कोडडॉम का उपयोग कर रहा हूं। उन मानों में से एक यह नियंत्रित करता है कि मैं जिस वर्ग का निर्माण कर रहा हूं उसका नाम क्या है। मुझे पता है कि मैं नियमित अभिव्यक्तियों का उपयोग करके वैध वर्ग नामों के बारे में भाषा नियमों के आधार पर नाम को निर्जलित कर सकता हूं, लेकिन मैं यह जानना चाहता हूं कि कक्षा के नाम को सत्यापित करने और/या निर्जलित करने के लिए ढांचे में निर्मित एक विशिष्ट विधि है या नहीं।क्या कक्षा नाम को सत्यापित करने के लिए कोई .NET फ़ंक्शन है?

उत्तर

25

अगर एक स्ट्रिंग कक्षा या चर के लिए एक वैध पहचानकर्ता है निर्धारित करने के लिए एक आसान तरीका है स्थिर विधि

System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value) 
2

मुझे अपने प्रश्न का उत्तर मिला। मैं

CodeCompiler.ValidateIdentifiers(class1); 

कॉल कर सकते हैं जहां Class1 कि CodeDom पेड़ और नीचे में सभी पहचानकर्ता मान्य करने के लिए एक CodeObject है। तो मैं सिर्फ क्लास नाम को सत्यापित करने के लिए अपना कोडटाइप डिस्क्लेरेशन क्लास 1 बनाने के बाद यह अधिकार कह सकता हूं, या मैं अपना कोडडॉम बना सकता हूं और फिर अंत में इसे अपने पेड़ में सभी पहचानकर्ताओं को सत्यापित करने के लिए कॉल कर सकता हूं। मुझे जिस चीज की जरूरत थी!

7

CSharpCodeProvider कक्षा पर CreateValidIdentifier विधि का उपयोग करें।

CSharpCodeProvider codeProvider = new CSharpCodeProvider(); 
string sFixedName = codeProvider.CreateValidIdentifier("somePossiblyInvalidName"); 
CodeTypeDeclaration codeType = new CodeTypeDeclaration(sFixedName); 

यह कुछ इनपुट दिए गए एक वैध नाम देता है। यदि आप सिर्फ नाम को सत्यापित करना चाहते हैं और इसे ठीक नहीं करना चाहते हैं, तो इनपुट और आउटपुट की तुलना करें। यह वैध इनपुट में बदलाव नहीं करेगा, इसलिए आउटपुट बराबर होगा।

+4

कॉल करने के लिए है इस करता है एक पहचानकर्ता नाम बदलने के लिए अगर यह एक सुरक्षित का विरोध करता है शब्द। यदि पास किए गए मान में अमान्य वर्ण हैं तो यह मान्य पहचानकर्ता नहीं बनाता है। तो यह सहायक है, लेकिन नया कोडटाइप बनाने से पहले ऐसा करने की ज़रूरत नहीं है। – Zach

1
public static bool IsReservedKeyWord(string identifier) 
     { 
      Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider(); 
      return csharpProvider.IsValidIdentifier(identifier); 
     }