我正在使用CodeDom根据用户值生成动态代码。其中一个值控制着我正在生成的类的名称。我知道我可以根据有关使用正则表达式的有效类名的语言规则对名称进行消毒,但我想知道框架中是否有一个特定的方法来验证和/或消毒类名。
答案 0 :(得分:26)
确定字符串是否是类或变量的有效标识符的简单方法是调用静态方法
System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)
答案 1 :(得分:8)
在CreateValidIdentifier
课程中使用CSharpCodeProvider
方法。
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
string sFixedName = codeProvider.CreateValidIdentifier("somePossiblyInvalidName");
CodeTypeDeclaration codeType = new CodeTypeDeclaration(sFixedName);
在给定输入的情况下返回有效名称。如果您只想验证名称而不修复它,请比较输入和输出。它不会改变有效输入,因此输出将是等效的。
答案 2 :(得分:2)
我找到了问题的答案。我可以打电话
CodeCompiler.ValidateIdentifiers(class1);
其中class1是一个CodeObject,用于验证CodeDom树及其下的所有标识符。所以我可以在创建CodeTypeDeclaration class1之后立即调用它来验证类名,或者我可以构建我的CodeDom,然后在最后调用它来验证树中的所有标识符。正是我需要的!
答案 3 :(得分:1)
public static bool IsReservedKeyWord(string identifier)
{
Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
return csharpProvider.IsValidIdentifier(identifier);
}