反射 - 从 System.Type 实例获取通用参数

Posted

技术标签:

【中文标题】反射 - 从 System.Type 实例获取通用参数【英文标题】:Reflection - Getting the generic arguments from a System.Type instance 【发布时间】:2008-11-16 14:08:31 【问题描述】:

如果我有以下代码:

MyType<int> anInstance = new MyType<int>();
Type type = anInstance.GetType();

如何通过查看类型变量来找出实例化“anInstance”的类型参数?有可能吗?

【问题讨论】:

【参考方案1】:

使用Type.GetGenericArguments。例如:

using System;
using System.Collections.Generic;

public class Test

    static void Main()
    
        var dict = new Dictionary<string, int>();

        Type type = dict.GetType();
        Console.WriteLine("Type arguments:");
        foreach (Type arg in type.GetGenericArguments())
        
            Console.WriteLine("  0", arg);
        
    

输出:

Type arguments:
  System.String
  System.Int32

【讨论】:

【参考方案2】:

使用 Type.GetGenericArguments()。例如:

using System;
using System.Reflection;

namespace ConsoleApplication1 
  class Program 
    static void Main(string[] args) 
      MyType<int> anInstance = new MyType<int>();
      Type type = anInstance.GetType();
      foreach (Type t in type.GetGenericArguments())
        Console.WriteLine(t.Name);
      Console.ReadLine();
    
  
  public class MyType<T>  

输出: Int32

【讨论】:

以上是关于反射 - 从 System.Type 实例获取通用参数的主要内容,如果未能解决你的问题,请参考以下文章

将实例化的 System.Type 作为通用方法的类型参数传递

System.Type反射(1/3)

C#从反射类型实例化通用列表[重复]

Hibernate Dao映射配置通用接口类反射获取加载calass实例

.NET Framework反射总结

[Unity3D]通过反射方式获取Game View当前选择的分辨率