C# - 如何知道对象是否是 ICollection 的衍生物

标签 c# reflection collections

我有一个通用列表:

IList<T> myobj = new List<T>();

如何检查 myobj是通用列表(又名 IList<T> )?

我试过了,没有成功:

if(myobj.GetType().IsGenericType && myobj is IList) //second exp is never true

此时我不想知道 T 的类型,我只想知道是否 myobj是一个列表。

---编辑--------------------

'myobj' 一直为 null,这导致它无法通过所有检查。对不起这是我的错。事实证明,我的问题中描述的解决方案(与您的一些答案类似)效果很好。不过我还没有尝试过其他答案。

我正在做以下事情:

PropertyType propInf = ...
var myobj = propInf.GetValue(parentobj,null);//was always null

最佳答案

你试过了吗(myObj is IList) :

    public static void Main(string[] args)
    {
        List<int> foo = new List<int>();
        bool b = foo is IList;  // true
    }

.NET 中的大多数通用集合接口(interface)都有对应的非通用接口(interface)(例如 IListIList<T>)

http://msdn.microsoft.com/en-us/library/system.collections.ilist.aspx

关于C# - 如何知道对象是否是 ICollection 的衍生物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8070306/

相关文章:

c# - 使用C#发送短信

c# - 使用 Linq 更新集合中除一个对象之外的所有对象

java - 在没有比较的情况下使用集合引用作为 if 语句条件?

控制元素插入红黑树的 Java TreeSet 方法

java - 打乱数组的元素

c# - Visual Studio 2017 社区版上的类图在哪里

javascript - 从 ajax 获取数据到 mvc 操作

c# - .Assembly/GetExportedTypes 抛出 FileNotFoundException

java - 为什么wait()方法可以在没有notify()的情况下工作?

ruby - 获取有关 Crystal 中继承链的信息