【问题标题】:How to validate namespace name in CodeDOM?如何验证 CodeDOM 中的命名空间名称?
【发布时间】:2013-03-07 05:48:09
【问题描述】:

我在 SE 中找到了使用 CodeDOM 的类名验证方法并使用了它:

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

通过此链接:Is there a .NET function to validate a class name?

但是,类名不允许使用 '.' (OEM 时期)其中命名空间可以是: System.Linq 例如它允许'.'。在选择 Regex 之类的选项或用于验证命名空间名称的循环之前,我想知道 .NET 中是否有任何方法可用于此任务。

编辑:

实际情况是,我有一个来自。用户可以从文本框中给出类名和命名空间。对于那个类名和命名空间,我将给出一个生成的代码。如果用户输入 SomeClass 作为类名和 Some.Namespace 作为命名空间,那么生成的代码将是:

namespace Some.Namespace   
{   
  class SomeClass{}   
}

为此,我需要验证用户输入的这两个名称。

【问题讨论】:

  • 你看过CodeGenerator类中的第二种方法吗:ValidateIdentifiers()
  • 是的@svick,但它的参数要求我提供整个 CodeObject。即ValidateIdentifiers(CodeObject e)。但我只需要像测试类名一样测试字符串....
  • 您始终可以为此创建一个临时对象:CodeGenerator.ValidateIdentifiers(new CodeNamespace(namespaceName))
  • 好点。但这是一种无效的方法。我该如何验证它?不会有返回类型。你能解释一下吗?

标签: c# namespaces codedom validating


【解决方案1】:

我尝试了一种不同的方法,它对我有用。

public bool IsValidNamespace(string input)  
        {  
            //Split the string from '.' and check each part for validity  
            string[] strArray = input.Split('.');  
            foreach (string item in strArray)  
            {                  
                if (! CodeGenerator.IsValidLanguageIndependentIdentifier(item))  
                    return false;  
            }  
            return true;   
        }

【讨论】:

    【解决方案2】:

    您可以为此使用CodeGenerator.ValidateIdentifiers()

    如果您不想检查整个树,只检查一个命名空间名称,您可以为此创建一个临时对象:

    CodeGenerator.ValidateIdentifiers(new CodeNamespace(namespaceName));
    

    根据文档,如果标识符无效,该方法将抛出 ArgumentException

    【讨论】:

    • 我也为此做了一个自定义的方法。用 '.' 分割命名空间并检查每个IsValidLanguageIndependentIdentifier(string value)。它有效。
    猜你喜欢
    • 2021-03-22
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多