有没有办法检索类型 T
来自 IEnumerable<T>
通过反射(reflection)?
例如
我有一个变量 IEnumerable<Child>
信息;我想通过反射获取 Child 的类型
最佳答案
IEnumerable<T> myEnumerable;
Type type = myEnumerable.GetType().GetGenericArguments()[0];
因此,
IEnumerable<string> strings = new List<string>();
Console.WriteLine(strings.GetType().GetGenericArguments()[0]);
打印 System.String
.
参见 MSDN对于 Type.GetGenericArguments
.
编辑:我相信这会解决评论中的问题:
// returns an enumeration of T where o : IEnumerable<T>
public IEnumerable<Type> GetGenericIEnumerables(object o) {
return o.GetType()
.GetInterfaces()
.Where(t => t.IsGenericType
&& t.GetGenericTypeDefinition() == typeof(IEnumerable<>))
.Select(t => t.GetGenericArguments()[0]);
}
一些对象实现了多个泛型 IEnumerable
因此有必要返回它们的枚举。
编辑:虽然,我不得不说,一个类实现IEnumerable<T>
是一个糟糕的主意。不止一个T
.
关于c# - 从 IEnumerable<T> 获取类型 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/906499/