3 回答
TA贡献1876条经验 获得超7个赞
我只是做一个扩展方法。这与我投入的所有工作都有效。
public static Type GetItemType<T>(this IEnumerable<T> enumerable)
{
return typeof(T);
}
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;
}
- 3 回答
- 0 关注
- 760 浏览
添加回答
举报