为了账号安全,请及时绑定邮箱和手机立即绑定

测试对象是否是C#中的泛型类型

测试对象是否是C#中的泛型类型

梦里花落0921 2019-09-03 16:01:33
如果对象是泛型类型,我想执行测试。我试过以下但没有成功:public bool Test(){    List<int> list = new List<int>();    return list.GetType() == typeof(List<>);}我做错了什么,我该如何进行这项测试?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

如果要检查它是否是泛型类型的实例:


return list.GetType().IsGenericType;

如果你想检查它是否是通用的List<T>:


return list.GetType().GetGenericTypeDefinition() == typeof(List<>);

正如Jon指出的那样,这会检查确切的类型等价。返回false并不一定意味着list is List<T>返回false(即,不能将对象分配给List<T>变量)。


查看完整回答
反对 回复 2019-09-03
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

您可以使用动态althougth来使用更短的代码,这可能比纯反射更慢:


public static class Extension

{

    public static bool IsGenericList(this object o)

    {

       return IsGeneric((dynamic)o);

    }


    public static bool IsGeneric<T>(List<T> o)

    {

       return true;

    }


    public static bool IsGeneric( object o)

    {

        return false;

    }

}




var l = new List<int>();

l.IsGenericList().Should().BeTrue();


var o = new object();

o.IsGenericList().Should().BeFalse();


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 611 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信