22

CodeDom を使用して、ユーザーの値に基づいて動的コードを生成しています。これらの値の 1 つは、生成するクラスの名前を制御します。正規表現を使用して有効なクラス名に関する言語規則に基づいて名前を無菌化できることは知っていますが、クラス名を検証および/または無菌化するための特定のメソッドがフレームワークに組み込まれているかどうかを知りたいです。

4

4 に答える 4

26

文字列がクラスまたは変数の有効な識別子であるかどうかを判断する簡単な方法は、静的メソッドを呼び出すことです

System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)
于 2008-09-18T14:22:40.727 に答える
8

クラスでCreateValidIdentifierメソッドを使用します。CSharpCodeProvider

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

何らかの入力が与えられると、有効な名前が返されます。名前を修正せずに検証するだけの場合は、入力と出力を比較します。有効な入力は変更されないため、出力は同等になります。

于 2008-09-18T14:22:03.817 に答える
2

私は自分の質問に対する答えを見つけました。電話できます

CodeCompiler.ValidateIdentifiers(class1);

ここで、class1は、そのCodeDomツリー以下のすべての識別子を検証するためのCodeObjectです。したがって、CodeTypeDeclaration class1を作成した直後にこれを呼び出してクラス名だけを検証するか、CodeDomを構築し、最後にこれを呼び出してツリー内のすべての識別子を検証することができます。必要なものだけ!

于 2008-09-18T14:19:12.093 に答える
1
public static bool IsReservedKeyWord(string identifier)
        {
            Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
            return csharpProvider.IsValidIdentifier(identifier);
        }
于 2008-09-18T16:02:10.877 に答える