在通用List <t> </t>中获取T的实际类型

时间:2010-09-11 00:47:51

标签: c# generics reflection

如何使用反射在运行时获取通用List中的实际T类型?

4 个答案:

答案 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.GetGenericArgumentsList<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