是否有.NET函数来验证类名?

时间:2020-03-06 14:21:29  来源:igfitidea点击:

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

解决方案

我找到了问题的答案。我可以打电话

CodeCompiler.ValidateIdentifiers(class1);

其中class1是一个CodeObject,用于验证该CodeDom树及其下方的所有标识符。因此,在创建CodeTypeDeclaration class1以仅验证类名称之后,可以立即调用此方法,也可以构建CodeDom,然后在最后调用此方法以验证树中的所有标识符。正是我所需要的!

CSharpCodeProvider类上使用CreateValidIdentifier方法。

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

给定一些输入,它将返回一个有效的名称。如果只想验证名称而不是固定名称,请比较输入和输出。它不会更改有效输入,因此输出将是等效的。

确定字符串是否为类或者变量的有效标识符的简单方法是调用静态方法

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

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