【问题标题】:Is there a .NET function to validate a class name?是否有 .NET 函数来验证类名?
【发布时间】:2010-09-10 16:58:17
【问题描述】:

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

【问题讨论】:

    标签: c# .net validation class naming


    【解决方案1】:

    CSharpCodeProvider 类上使用CreateValidIdentifier 方法。

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

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

    【讨论】:

    • 所有这一切都是在标识符与保留字冲突时重命名它。如果传入的值中包含无效字符,则不会创建有效标识符。所以这很有帮助,但不是在创建新代码类型之前需要完成的所有事情。
    【解决方案2】:
    public static bool IsReservedKeyWord(string identifier)
            {
                Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
                return csharpProvider.IsValidIdentifier(identifier);
            }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        CodeCompiler.ValidateIdentifiers(class1);
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-08
          • 2016-11-08
          相关资源
          最近更新 更多