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

有帮助吗?

解决方案

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

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

其他提示

使用 CreateValidIdentifier 方法上的 CSharpCodeProvider 班级。

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

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

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

CodeCompiler.ValidateIdentifiers(class1);

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

public static bool IsReservedKeyWord(string identifier)
        {
            Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
            return csharpProvider.IsValidIdentifier(identifier);
        }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top