22

我正在使用 CodeDom 根据用户值生成动态代码。其中一个值控制我正在生成的类的名称。我知道我可以使用正则表达式根据有关有效类名的语言规则对名称进行消毒,但我想知道框架中是否内置了特定方法来验证和/或消毒类名。

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 是一个 CodeObject,用于验证该 CodeDom 树及下面的所有标识符。因此,我可以在创建 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 回答