如何从 IList 获取项目计数<>作为对象?



在一个方法中,我得到一个object

在某些情况下,这个object可以是"某物"的IList(我无法控制这个"某物")。

我正在尝试:

  1. 确定此对象是(某事物的)IList
  2. object转换为"IList<something>",以便能够从中获得Count

现在,我陷入了困境,正在寻找想法。

您可以检查您的object是否使用is实现了IList

然后您可以将object强制转换为IList以获得计数。

object myObject = new List<string>();
// check if myObject implements IList
if (myObject  is IList)
{
   int listCount = ((IList)myObject).Count;
}
if (obj is ICollection)
{
    var count = ((ICollection)obj).Count;
}
        object o = new int[] { 1, 2, 3 };
        //...
        if (o is IList)
        {
            IList l = o as IList;
            Console.WriteLine(l.Count);
        }

这将打印3,因为int[]是IList。

由于您只需要计数,因此您可以使用这样一个事实:任何实现IList<T>的东西也实现IEnumerable;此外,在System.Linq.Enumerable中还有一个扩展方法,它返回任何(通用)序列的计数:

var ienumerable = inputObject as IEnumerable;
if (ienumerable != null)
{
    var count = ienumerable.Cast<object>().Count();
}

调用Cast是因为非通用IEnumerable上没有现成的Count

相关内容

  • 没有找到相关文章

最新更新