如何使用反射在运行时获取通用List中的实际T类型?
答案 0 :(得分:8)
这取决于你究竟在问什么:
在通用类型Blah<T>
中编写代码时,如何获取反射类型T
?
答案:typeof(T)
我有一个对象包含List<T>
某种类型T
。如何通过反射检索类型T
?
简短回答:myList.GetType().GetGenericArguments()[0]
答案很长:
var objectType = myList.GetType();
if (!objectType.IsGenericType() ||
objectType.GetGenericTypeDefinition() != typeof(List<>))
{
throw new InvalidOperationException(
"Object is not of type List<T> for any T");
}
var elementType = objectType.GetGenericArguments()[0];
答案 1 :(得分:2)
您可以使用Type.GetGenericArguments在List<T>
中返回类型T.
例如,这将返回作为参数传递的任何List<T>
的类型:
Type GetListType(object list)
{
Type type = list.GetType();
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
return type.GetGenericArguments()[0];
else
throw new ArgumentException("list is not a List<T>", "list");
}
答案 2 :(得分:1)
typeof (T)
或
typeof (T).UnderlyingSystemType
答案 3 :(得分:0)
$('.title-desc-wrapper.has-main-image').toggleClass('has-main-image no-main-image');
dynamic