【问题标题】:Validator for type strings?类型字符串的验证器?
【发布时间】:2008-11-02 05:10:53
【问题描述】:

有人知道是否已经有“类型”字符串的验证器吗?

我想确保我的自定义配置中的类型属性是以下之一:

type="TopNamespace.SubNameSpace.ContainingClass, MyAssembly" type="TopNamespace.SubNameSpace.ContainingClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"

写一个很容易,我只是不想重新发明轮子。

【问题讨论】:

  • 您使用什么语言/环境?如果您将其添加到标签中,您可能会得到更好的答案。
  • 别管标签,把它放在标题里。

标签: .net configuration validation


【解决方案1】:

我不确定您所说的“自定义配置”是什么意思,但如果您仍在使用 .NET 的配置框架(例如,开发自定义 configurationSection/configurationElement),您只需键入 @ 987654323@ 作为 System.Type(而不是字符串),.NET 会自动进行验证。

【讨论】:

    【解决方案2】:

    如果 resharper 的全局错误分析找不到命名空间或类,您会收到错误,但如果您引用插件,这并不总是有帮助。

    可能最简单的方法是将您的代码加载到应用程序域中的 try catch 块中。

    如果 dll 在 bin 中,它将在启动时加载,但在您使用它之前不会引发错误,因此如果您只是新建一个 ContainingClass 的实例。您可以从配置中提取命名空间,然后尝试使用每个类。

    【讨论】:

    • 加载类型很容易。我所追求的是在我尝试之前从配置中检查字符串。为此编写验证器很容易。如果.NET somwhere 中已经存在一个,我只是不想这样做。
    • 我没有看到任何东西,但它的正则表达式应该不会太难。
    【解决方案3】:

    我很确定框架中没有为此内置任何内容。

    有几个results on regexlib.com。它们中的任何一个都应该适用于您描述的场景。但是,请记住,它们都不会正确支持指定泛型类型的语法。为了正确处理这个问题,仅使用正则表达式是不够的——您需要针对泛型类型参数递归处理相同的正则表达式。例如,考虑以下类型名称:

    List<>
    "System.Collections.Generic.List`1"
    
    List<string>
    "System.Collections.Generic.List`1[[System.String]]"
    
    Dictionary<string, string>
    "System.Collections.Generic.Dictionary`2[[System.String],[System.String]]"
    
    Dictionary<string, List<string>>
    "System.Collections.Generic.Dictionary`2[[System.String],[System.Collections.Generic.List`1[[System.String]]]]"
    

    有关详细信息,请参阅 Type.AssemblyQualifiedName 上的 MSDN 文档。

    【讨论】:

      【解决方案4】:

      如果您正在编写自定义配置部分,Abraham Pinzur 的建议是正确的。

      Type.GetType(...) 允许您手动完成。

      【讨论】:

        猜你喜欢
        • 2020-09-10
        • 2017-10-16
        • 2022-12-11
        • 2019-05-01
        • 1970-01-01
        • 2013-07-10
        • 1970-01-01
        • 2014-04-22
        • 2015-10-23
        相关资源
        最近更新 更多