所以基本上,我有一个接受对象类型参数的方法。如果该对象实际上是一个列表、一个数组或任何类型的集合,我需要获取它包含的元素数量。
我可以检查它是否是一个数组,但检查类型上的 IsArray 属性,然后将对象转换为数组,但是如何检查其他集合?
测试表明 List 将转换为 ICollection,但我不知道如何检查该对象实际上是任何类型的 List。
所以基本上,我有一个接受对象类型参数的方法。如果该对象实际上是一个列表、一个数组或任何类型的集合,我需要获取它包含的元素数量。
我可以检查它是否是一个数组,但检查类型上的 IsArray 属性,然后将对象转换为数组,但是如何检查其他集合?
测试表明 List 将转换为 ICollection,但我不知道如何检查该对象实际上是任何类型的 List。
我不确定这是否是您需要的,但所有数组和集合都是可枚举的:
var enumerableObj = obj as IEnumerable;
if(enumerableObj != null)
{
var count = enumerableObj.Count();
.....
}
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();
您可以使用is
可用于类型检查的关键字。您可以键入 check for ICollection
、IEnumerable
等IList
。示例如下。
var obj = new List<int>();
if (obj is IList)//True
var count = ((IList)obj).Count;
您还可以使用 Type.IsAssignableFrom 方法检查您的类型是否是某种集合。
typeof(IEnumerable).IsAssignableFrom(yourType)