【发布时间】:2011-01-07 22:28:27
【问题描述】:
我知道this 的问题,这是后续问题,还有this 的问题,但我无法将它们放在一起以帮助我做我想做的事情:
我有一个泛型类型,我想检查 T 是否为 struct 或者如果它实现了 IEnumerable<T2>,那么我想检查 T2 是否为 struct。
到目前为止,我已经到了这里('因为杂乱无章的代码,这是实验性的):
private class TestClass<T>
{
public TestClass()
{
Type type = typeof(T);
//(detecting T == IEnumerable<something> ommitted for clarity)
Type enumerableType = type.GetInterfaces()
.Where(t => t.IsGenericType)
.Select(t => t.GetGenericTypeDefinition())
.Where(t => t == typeof(IEnumerable<>))
.FirstOrDefault();
if(enumerableType != null)
{
Type enumeratedType = type.GetGenericArguments().First();
if(!enumeratedType.IsValueType) //throw etc...
}
}
}
我遇到的问题是enumerableType 是IEnumerable<>,所以enumeratedType 输出为T,而不是我传入的任何内容(例如new TestClass<int[]>())。
【问题讨论】:
标签: c# generics reflection