【发布时间】:2013-11-07 20:55:27
【问题描述】:
所以基本上,我有一个接受对象类型参数的方法。如果该对象实际上是一个列表、数组或任何类型的集合,我需要获取它包含的元素数量。
我可以检查它是否是一个数组,但检查类型上的 IsArray 属性,然后将对象转换为一个数组,但是如何检查其他集合?
测试表明 List 将强制转换为 ICollection,但我不知道如何检查该对象实际上是任何类型的 List。
【问题讨论】:
标签: c# reflection collections
所以基本上,我有一个接受对象类型参数的方法。如果该对象实际上是一个列表、数组或任何类型的集合,我需要获取它包含的元素数量。
我可以检查它是否是一个数组,但检查类型上的 IsArray 属性,然后将对象转换为一个数组,但是如何检查其他集合?
测试表明 List 将强制转换为 ICollection,但我不知道如何检查该对象实际上是任何类型的 List。
【问题讨论】:
标签: c# reflection collections
我不确定这是否是您需要的,但所有数组和集合都是可枚举的:
var enumerableObj = obj as IEnumerable;
if(enumerableObj != null)
{
var count = enumerableObj.Count();
.....
}
【讨论】:
您可以检查对象是否为IEnumerable,如果是,请使用IEnumerable<T>的扩展方法
IEnumerable e = obj as IEnumerable;
if (e != null)
count = e.Cast<object>.Count();
【讨论】:
您可以使用is 关键字来进行类型检查。您可以键入检查 ICollection、IEnumerable、IList 等。示例如下。
var obj = new List<int>();
if (obj is IList)//True
var count = ((IList)obj).Count;
【讨论】:
您还可以使用 Type.IsAssignableFrom 方法检查您的类型是否是某种集合。
typeof(IEnumerable).IsAssignableFrom(yourType)
【讨论】: