为了账号安全,请及时绑定邮箱和手机立即绑定

如何从泛型类或方法的成员中获取T的类型?

如何从泛型类或方法的成员中获取T的类型?

阿波罗的战车 2019-06-20 16:58:02
如何从泛型类或方法的成员中获取T的类型?假设我在类或方法中有一个泛型成员,那么:public class Foo<T>{     public List<T> Bar { get; set; }     public void Baz()     {         // get type of T     }   }当我实例化类时,T成MyTypeObject1,因此该类具有一个泛型List属性:List<MyTypeObject1>..这同样适用于非泛型类中的泛型方法:public class Foo{     public void Bar<T>()     {         var baz = new List<T>();         // get type of T     }}我想知道,我的类的列表包含什么类型的对象。因此,List属性调用Bar或者局部变量baz,包含哪种类型的T?我做不到Bar[0].GetType(),因为列表可能包含零元素。我该怎么做?
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

如果我正确理解,您的列表具有与容器类本身相同的类型参数。如果是这样,那么:

Type typeParameterType = typeof(T);


查看完整回答
反对 回复 2019-06-20
?
慕沐林林

TA贡献2016条经验 获得超9个赞

(注:我想你所知道的就是objectIList或者类似的,并且在运行时列表可以是任何类型)

如果你知道这是List<T>,然后:

Type type = abc.GetType().GetGenericArguments()[0];

另一种选择是查看索引器:

Type type = abc.GetType().GetProperty("Item").PropertyType;

使用新的TypeInfo:

using System.Reflection;// ...var type = abc.GetType().GetTypeInfo().GenericTypeArguments[0];


查看完整回答
反对 回复 2019-06-20
?
ITMISS

TA贡献1871条经验 获得超8个赞

使用下面的扩展方法,您可以不进行反射就可以逃脱:

public static Type GetListType<T>(this List<T> _){
    return typeof(T);}

或更一般的:

public static Type GetEnumeratedType<T>(this IEnumerable<T> _){
    return typeof(T);}

用法:

List<string>        list    = new List<string> { "a", "b", "c" };
IEnumerable<string> strings = list;IEnumerable<object> objects = list;
Type listType    = list.GetListType();          
 // stringType stringsType = strings.GetEnumeratedType();  
 // stringType objectsType = objects.GetEnumeratedType();  // BEWARE: object


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 1451 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信