如何从IList<>获取项目计数得到了一个对象?

时间:2012-01-25 09:29:33

标签: c# generics reflection casting ilist

在方法中,我得到object

在某些情况下,这个object可能是IList的“某事”(我无法控制这个“某事”)。

我想:

  1. 确定此对象是IList(某事物)
  2. object投射到“IList<something>”中,以便能够从中获取Count
  3. 目前,我陷入困境并寻找创意。

4 个答案:

答案 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