为了账号安全,请及时绑定邮箱和手机立即绑定

从IEnumerable <T>获取类型T

从IEnumerable <T>获取类型T

C#
慕标5832272 2019-11-13 09:47:27
有没有一种方法来检索类型T从IEnumerable<T>通过反射?例如我有一个可变的IEnumerable<Child>信息;我想通过反射来检索孩子的类型
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

我只是做一个扩展方法。这与我投入的所有工作都有效。


public static Type GetItemType<T>(this IEnumerable<T> enumerable)

{

    return typeof(T);

}


查看完整回答
反对 回复 2019-11-13
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我有一个类似的问题。所选答案适用于实际实例。就我而言,我只有一个类型(来自PropertyInfo)。


如果类型本身typeof(IEnumerable<T>)不是的实现,则所选答案失败IEnumerable<T>。


对于这种情况,以下工作:


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;

}


查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 760 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信