在方法中,我得到object
。
在某些情况下,这个object
可能是IList
的“某事”(我无法控制这个“某事”)。
我想:
IList
(某事物)object
投射到“IList<something>
”中,以便能够从中获取Count
。目前,我陷入困境并寻找创意。
答案 0 :(得分:20)
您可以使用object
检查IList
是否实施is
。
然后,您可以将object
转换为IList
以获取计数。
object myObject = new List<string>();
// check if myObject implements IList
if (myObject is IList)
{
int listCount = ((IList)myObject).Count;
}
答案 1 :(得分:4)
if (obj is ICollection)
{
var count = ((ICollection)obj).Count;
}
答案 2 :(得分:1)
object o = new int[] { 1, 2, 3 };
//...
if (o is IList)
{
IList l = o as IList;
Console.WriteLine(l.Count);
}
这打印3,因为int []是IList。
答案 3 :(得分:0)
由于你想要的只是计数,你可以使用任何实现IList<T>
的东西也实现IEnumerable
;此外,System.Linq.Enumerable
中有一个扩展方法,它返回任何(通用)序列的计数:
var ienumerable = inputObject as IEnumerable;
if (ienumerable != null)
{
var count = ienumerable.Cast<object>().Count();
}
拨打Cast
是因为开箱即用there isn't a Count
on non-generic IEnumerable
。