【问题标题】:Programmatically get a Type's Alias in .NET以编程方式在 .NET 中获取类型的别名
【发布时间】:2019-01-22 16:26:26
【问题描述】:

是否可以通过反射确定对象类型的别名?给定以下示例,其中 myObject 的类型为 System.Int32 - 例如

Type t = myObject.GetType();

t.Name 将是 Int32。但是,我想确定有问题的对象的可能别名(如果有),以便我可以解析 int 的类型名称以及 Int32

我不想在这方面花费大量时间。如果没有非常简单的内置解决方案,我将自己映射这些值。 =)

【问题讨论】:

  • int 在运行时不作为 .net 类型存在

标签: reflection


【解决方案1】:

不直接用反射,没有。 “类型名称”(如您所说)“int”根本不是类型名称,而是语言关键字。

当然,您可以使用字典来存储从类型名称到较短的便利形式的查找。但是反射 API 中没有任何东西可以为您做到这一点。

【讨论】:

    【解决方案2】:

    您可以使用 CodeDom 类获取特定于语言的类型别名

        var cs = new CSharpCodeProvider();
        var vb = new VBCodeProvider();
    
        var type = typeof (int);
        Console.WriteLine("Type Name: {0}", type.Name); // Int32
        Console.WriteLine("C# Type Name: {0}", cs.GetTypeOutput(new CodeTypeReference(type))); // int
        Console.WriteLine("VB Type Name: {0}", vb.GetTypeOutput(new CodeTypeReference(type))); // Integer
    

    【讨论】:

      【解决方案3】:

      别名似乎只是编译时的。请注意它们如何不适用于给定源文件之外。它们只是方便,仅此而已。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-10
        • 2018-09-20
        • 2014-04-09
        相关资源
        最近更新 更多