2008-09-18 36 views
21

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

回答

25

一种简单的方法来确定一个字符串是一类或可变是有效的标识符是调用静态方法

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

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

CodeCompiler.ValidateIdentifiers(class1); 

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

7

CSharpCodeProvider类中使用CreateValidIdentifier方法。

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

它返回给定输入的有效名称。如果您只想验证名称而不修复它,请比较输入和输出。它不会改变有效的输入,因此输出将是等效的。

+4

所有这样做是如果它与一个保留冲突重命名的标识符字。如果传入的值中包含无效字符,则不会创建有效的标识符。所以这是有帮助的,但并不是在你创建新的代码类型之前需要发生的一切。 – Zach 2008-09-18 15:02:59

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