0

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

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

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

4

4 回答 4

2

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

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

    .....

}
于 2013-11-07T21:00:26.583 回答
1

You can check if the object is IEnumerable and if it is, use the Extension method for IEnumerable<T>

IEnumerable e = obj as IEnumerable;
if (e != null)
   count = e.Cast<object>.Count();
于 2013-11-07T21:40:22.860 回答
1

您可以使用is可用于类型检查的关键字。您可以键入 check for ICollectionIEnumerableIList。示例如下。

var obj = new List<int>();

if (obj is IList)//True
    var count = ((IList)obj).Count;
于 2013-11-07T21:00:12.877 回答
0

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

typeof(IEnumerable).IsAssignableFrom(yourType)
于 2013-11-07T21:13:55.033 回答