T&GT;自IEnumerable&LT越来越T型; [英] getting type T from IEnumerable<T>
问题描述
有没有办法来检索类型 T
从的IEnumerable&LT; T&GT;
通过反射
例如
我有一个变量的IEnumerable&LT;儿童&GT;
信息;我想检索通过反射孩子的类型
的IEnumerable&LT; T&GT; myEnumerable;
类型type = myEnumerable.GetType()GetGenericArguments()[0]。
正是如此,
的IEnumerable&LT;串GT;串=新的List&LT;串GT;();
Console.WriteLine(strings.GetType()GetGenericArguments()[0]);
打印 System.String
。
请参阅 MSDN 为 Type.GetGenericArguments
。
编辑:我相信这将解决该意见所关注的问题:
//返回T的枚举其中O:IEnumerable的&LT; T&GT;
公共IEnumerable的&LT;类型&GT; GetGenericIEnumerables(对象o){
返回o.GetType()
.GetInterfaces()
。凡(T =&GT; t.IsGenericType == TRUE
&功放;&安培; t.GetGenericTypeDefinition()== typeof运算(IEnumerable的&LT;&GT;))
。选择(T =&GT; t.GetGenericArguments()[0]);
}
一些对象实现多个通用的IEnumerable
因此有必要返回他们的枚举。
编辑:虽然,我不得不说,它是一个类来实现的IEnumerable℃的可怕的想法; T&GT;
的多个 T
。
is there a way to retrieve type T
from IEnumerable<T>
through reflection?
e.g.
i have a variable IEnumerable<Child>
info; i want to retrieve Child's type through reflection
IEnumerable<T> myEnumerable;
Type type = myEnumerable.GetType().GetGenericArguments()[0];
Thusly,
IEnumerable<string> strings = new List<string>();
Console.WriteLine(strings.GetType().GetGenericArguments()[0]);
prints System.String
.
See MSDN for Type.GetGenericArguments
.
Edit: I believe this will address the concerns in the comments:
// returns an enumeration of T where o : IEnumerable<T>
public IEnumerable<Type> GetGenericIEnumerables(object o) {
return o.GetType()
.GetInterfaces()
.Where(t => t.IsGenericType == true
&& t.GetGenericTypeDefinition() == typeof(IEnumerable<>))
.Select(t => t.GetGenericArguments()[0]);
}
Some objects implement more than one generic IEnumerable
so it is necessary to return an enumeration of them.
Edit: Although, I have to say, it's a terrible idea for a class to implement IEnumerable<T>
for more than one T
.
这篇关于T&GT;自IEnumerable&LT越来越T型;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!