首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从IEnumerable<T>获取类型T

从IEnumerable<T>获取类型T
EN

Stack Overflow用户
提问于 2009-05-25 12:12:43
回答 10查看 71.8K关注 0票数 118

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

例如:

我有一个变量Child info;我想通过反射检索IEnumerable<Child>的类型

EN

回答 10

Stack Overflow用户

发布于 2012-03-15 03:12:23

我只需要做一个扩展方法。这对我所做的一切都很有效。

代码语言:javascript
复制
public static Type GetItemType<T>(this IEnumerable<T> enumerable)
{
    return typeof(T);
}
票数 41
EN

Stack Overflow用户

发布于 2013-07-18 10:13:20

我也遇到过类似的问题。选择的答案适用于实际情况。在我的例子中,我只有一个类型(来自PropertyInfo)。

当类型本身是typeof(IEnumerable<T>)而不是IEnumerable<T>的实现时,选择的答案将失败。

在这种情况下,以下方法有效:

代码语言:javascript
复制
public static Type GetAnyElementType(Type type)
{
   // Type is Array
   // short-circuit if you expect lots of arrays 
   if (type.IsArray)
      return type.GetElementType();

   // type is IEnumerable<T>;
   if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof (IEnumerable<>))
      return type.GetGenericArguments()[0];

   // type implements/extends IEnumerable<T>;
   var enumType = type.GetInterfaces()
                           .Where(t => t.IsGenericType && 
                                  t.GetGenericTypeDefinition() == typeof(IEnumerable<>))
                           .Select(t => t.GenericTypeArguments[0]).FirstOrDefault();
   return enumType ?? type;
}
票数 32
EN

Stack Overflow用户

发布于 2009-05-25 12:27:14

如果你知道IEnumerable<T> (通过泛型),那么只需要typeof(T)就可以了。否则(对于object或非通用IEnumerable),请检查实现的接口:

代码语言:javascript
复制
        object obj = new string[] { "abc", "def" };
        Type type = null;
        foreach (Type iType in obj.GetType().GetInterfaces())
        {
            if (iType.IsGenericType && iType.GetGenericTypeDefinition()
                == typeof(IEnumerable<>))
            {
                type = iType.GetGenericArguments()[0];
                break;
            }
        }
        if (type != null) Console.WriteLine(type);
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/906499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档