【问题标题】:FullName of generic type without assembly info?没有装配信息的泛型类型的全名?
【发布时间】:2011-01-09 02:48:46
【问题描述】:

我有一个数据库表,用于存储窗口的高度、宽度、状态等。作为窗口的标识符,我使用表单的完整类型名称。它运作良好,但我发现某些通用形式的名称非常长。原因是泛型类型与完整的程序集信息一起列出。有没有办法跳过它?

例如,常规表单的全名如下所示:

Some.Name.Space.NameOfForm

但是一个通用表单的全名是这样的:

Some.Name.Space.NameOfForm`1[[Some.Other.Name.Space.GenericType, AssemblyName, Version=1.0.2.0, Cuntulre=neutral, PublicKeyToken=null]]

为什么会这么长?有没有办法让我得到一个更短的版本?例如:

Some.Name.Space.NameOfForm`1[[Some.Other.Name.Space.GenericType]]

有什么线索吗?

【问题讨论】:

  • 你的名字是怎么来的? .GetType().FullName?
  • @Tor:没错,是的。
  • @Svish b8adamson's answer 实际上是正确的。
  • @jnm2 超级老问题,谢谢,更新了:)

标签: c# types tostring


【解决方案1】:

我同意 dbemerlin 的观点,你的最终目标似乎很奇怪,但我只是想指出这一点

GetType().ToString();

似乎返回了较短版本的类型名(没有通用参数的程序集信息)。

我想这对于更易于阅读的类型名称版本可能会很方便。

【讨论】:

  • 这应该是答案。谢谢。
  • 一点也不奇怪。对于导致大量问题的问题,这正是我所需要的。如果您尝试将数据发送到单声道框架项目,则程序集信息与 .net 核心不匹配。
  • 我觉得很奇怪,MS 也没有通过属性公开它,但它有效,所以我很高兴! :)
【解决方案2】:

我猜泛型类使用的类型取决于特定的程序集(大多数 .NET 类也是如此),所以我认为如果不通过反射或字符串解析手动创建此字符串,您将不会得到任何其他东西。

我不认为使用类型名称作为键是一个好主意,也许您应该考虑获得一些其他键(但我不知道要求,所以我不能推荐其他东西)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2017-06-22
    相关资源
    最近更新 更多