在一个方法中,我得到一个object
。
在某些情况下,这个object
可以是"某物"的IList
(我无法控制这个"某物")。
我正在尝试:
- 确定此对象是(某事物的)
IList
- 将
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
。