假设我在类或方法中有一个泛型成员,如下所示:
public class Foo<T>
{
public List<T> Bar { get; set; }
public void Baz()
{
// get type of T
}
}
当我实例化类时,变成 ,所以该类有一个泛型列表属性:。这同样适用于非泛型类中的泛型方法:T
MyTypeObject1
List<MyTypeObject1>
public class Foo
{
public void Bar<T>()
{
var baz = new List<T>();
// get type of T
}
}
我想知道我的类列表包含什么类型的对象。那么调用的列表属性或局部变量包含什么类型呢?T
Bar
baz
我不能这样做,因为列表可能包含零个元素。我该怎么做?Bar[0].GetType()
网友回答:
如果我理解正确,您的列表与容器类本身具有相同的类型参数。如果是这种情况,则:
Type typeParameterType = typeof(T);
如果你有幸拥有作为类型参数,请参阅 Marc 的答案。object
网友回答:
(注意:我假设你所知道的都是或或类似的,并且列表在运行时可以是任何类型的)object
IList
如果您知道它是一个 ,那么:List<T>
Type type = abc.GetType().GetGenericArguments()[0];
另一种选择是查看索引器:
Type type = abc.GetType().GetProperty("Item").PropertyType;
使用新的类型信息:
using System.Reflection;
// ...
var type = abc.GetType().GetTypeInfo().GenericTypeArguments[0];
网友回答:
使用以下扩展方法,您可以摆脱而无需反射:
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(); // string
Type stringsType = strings.GetEnumeratedType(); // string
Type objectsType = objects.GetEnumeratedType(); // BEWARE: object
模板简介:该模板名称为【如何从泛型类或方法的成员获取 T 的类型】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。