【C#】获取泛型<T>的真实类型

需求:在包含泛型T的类或方法中,想要根据T的具体类型,进行相应的处理,需求伪代码如下:

public void Test<T>()
{
    if(T is string)
    {
        // do something 
    }
    else if (T is Student)
    {
        // do somthing
    }
}

最快捷的办法:

public void Test<T>()
{
    Type t = typeof(T);
    if (t.Name.Equals("Student"))
    {
        // do something
    }
}

换一种思路:
如果只是为了解决本文情景下的需求,如果已经能确定T是哪几种类型,也可以通过传参来实现if…else分开处理(参数是枚举类型)。

如果数据是List< T >且内容不为空,可以根据内容Item来反射获取类型。


重要的参考:

http://stackoverflow.com/questions/557340/how-to-get-the-type-of-t-from-a-member-of-a-generic-class-or-method

原文地址:https://www.cnblogs.com/guxin/p/csharp-how-to-get-generic-real-type.html