【问题标题】:What are the Type.GetType search rules for a type name prefixed with "."?以“.”为前缀的类型名称的 Type.GetType 搜索规则是什么?
【发布时间】:2012-01-12 16:01:49
【问题描述】:

例如Type.GetType(".System.Collections.ArrayList", false, false)Type.GetType("System.Collections.ArrayList", false, false)

我认为这些是等价的,但我注意到前者需要两倍的时间来解决,并且在进一步调查后我找不到对前者的明确支持:http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx

这些是等价的吗?如果是,知道为什么前者要解决后者两倍的时间吗?

【问题讨论】:

  • 为什么类型名称以 . ?
  • @HansPassant - 在我看来,以. 开头的意思是“查看'全局'命名空间”......从实际的角度来看,如果你有一个“开放”命名空间列表,你'想尝试解析一个可能不是完全限定的类型名称,使用[""; "System"; "System.Collections"] 之类的列表更容易,其中"" 代表这个虚构的“全局”命名空间,以便您可以尝试所有组合加入命名空间列表使用. 分隔符的可能类型名称,没有特殊大小写类型名称可能是完全限定的
  • grammar for type names,好像是允许前导句的bug。
  • @StephenSwensen:在没有全局命名空间说明符的情况下,您可以使用程序集名称来完全限定吗?
  • @Daniel - 我倾向于同意允许领先时期必须是一个错误(BNF 是一个很好的支持来源)。我注意到其他一些奇怪的迹象:调用Type.GetType("..",true,true) 将导致异常消息“无法加载类型'。'”......它正在剥离单个前导'。'忘记它曾经做过。

标签: c# .net reflection .net-4.0 f#


【解决方案1】:

这里真的没有全局命名空间的概念,因为你打开的命名空间在这个上下文中并不重要。

将其视为始终从根(全局)搜索。 Type.GetType 不在任何命名空间中,也没有打开任何命名空间。您必须限定要搜索的类型,包括其命名空间。

【讨论】:

    【解决方案2】:

    来自您提供的链接:

    句点 (.) 表示命名空间标识符。

    我会拥有领先的. 会导致扫描所有命名空间,甚至是当前程序集之外的命名空间。

    【讨论】:

    • 我也有类似的想法,但是Type.GetType(".Collections.ArrayList", false, false)没有解决
    猜你喜欢
    • 2021-01-24
    • 2017-05-25
    • 2020-02-13
    • 2018-11-23
    • 2020-02-16
    • 1970-01-01
    • 2021-11-23
    • 2012-07-02
    • 1970-01-01
    相关资源
    最近更新 更多