T>自IEnumerable&LT越来越T型; [英] getting type T from IEnumerable<T>

查看:169
本文介绍了T>自IEnumerable&LT越来越T型;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法来检索类型 T 的IEnumerable< T> 通过反射

例如

我有一个变量的IEnumerable<儿童> 信息;我想检索通过反射孩子的类型


解决方案

 的IEnumerable< T> myEnumerable;
类型type = myEnumerable.GetType()GetGenericArguments()[0]。

正是如此,

 的IEnumerable<串GT;串=新的List<串GT;();
Console.WriteLine(strings.GetType()GetGenericArguments()[0]);

打印 System.String

请参阅 MSDN Type.GetGenericArguments

编辑:我相信这将解决该意见所关注的问题:

  //返回T的枚举其中O:IEnumerable的< T>
公共IEnumerable的<类型> GetGenericIEnumerables(对象o){
    返回o.GetType()
            .GetInterfaces()
            。凡(T => t.IsGenericType == TRUE
                &功放;&安培; t.GetGenericTypeDefinition()== typeof运算(IEnumerable的<>))
            。选择(T => t.GetGenericArguments()[0]);
}

一些对象实现多个通用的IEnumerable 因此有必要返回他们的枚举。

编辑:虽然,我不得不说,它是一个类来实现的IEnumerable℃的可怕的想法; T> 的多个 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆