【问题标题】:Get the length of an object if the object's type is a collection or any kind如果对象的类型是集合或任何类型,则获取对象的长度
【发布时间】:2013-11-07 20:55:27
【问题描述】:

所以基本上,我有一个接受对象类型参数的方法。如果该对象实际上是一个列表、数组或任何类型的集合,我需要获取它包含的元素数量。

我可以检查它是否是一个数组,但检查类型上的 IsArray 属性,然后将对象转换为一个数组,但是如何检查其他集合?

测试表明 List 将强制转换为 ICollection,但我不知道如何检查该对象实际上是任何类型的 List。

【问题讨论】:

    标签: c# reflection collections


    【解决方案1】:

    我不确定这是否是您需要的,但所有数组和集合都是可枚举的:

    var enumerableObj = obj as IEnumerable;
    if(enumerableObj != null)
    {
        var count = enumerableObj.Count();
    
        .....
    
    }
    

    【讨论】:

    【解决方案2】:

    您可以检查对象是否为IEnumerable,如果是,请使用IEnumerable<T>的扩展方法

    IEnumerable e = obj as IEnumerable;
    if (e != null)
       count = e.Cast<object>.Count();
    

    【讨论】:

    • ICollection 在我的情况下就足够了,但这个答案实际上解决了发布的问题。
    【解决方案3】:

    您可以使用is 关键字来进行类型检查。您可以键入检查 ICollectionIEnumerableIList 等。示例如下。

    var obj = new List<int>();
    
    if (obj is IList)//True
        var count = ((IList)obj).Count;
    

    【讨论】:

      【解决方案4】:

      您还可以使用 Type.IsAssignableFrom 方法检查您的类型是否是某种集合。

      typeof(IEnumerable).IsAssignableFrom(yourType)
      

      【讨论】:

        猜你喜欢
        • 2013-02-02
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 2020-03-04
        • 1970-01-01
        • 2014-01-07
        • 2010-11-28
        • 1970-01-01
        相关资源
        最近更新 更多