Как получить количество предметов из IList <>, полученных как объект?
В методе я получаю object
.
В какой-то ситуации этот object
может быть IList
"что-то" (я не могу контролировать это "что-то").
Я пытаюсь:
- Определите, что этот объект является
IList
(чего-то) - Переместите
object
в " IList<something>
", чтобы получить от него Count
.
На данный момент я застрял и искал идеи.
Ответы
Ответ 1
Вы можете проверить, если ваш object
реализует IList
, используя is
.
Затем вы можете передать свой object
в IList
чтобы получить счет.
object myObject = new List<string>();
// check if myObject implements IList
if (myObject is IList)
{
int listCount = ((IList)myObject).Count;
}
Ответ 2
if (obj is ICollection)
{
var count = ((ICollection)obj).Count;
}
Ответ 3
object o = new int[] { 1, 2, 3 };
//...
if (o is IList)
{
IList l = o as IList;
Console.WriteLine(l.Count);
}
Это печатает 3, потому что int [] является IList.
Ответ 4
Поскольку все, что вы хотите, это счетчик, вы можете использовать тот факт, что все, что реализует IList<T>
также реализует IEnumerable
; и, кроме того, существует метод расширения в System.Linq.Enumerable
который возвращает количество любой (общей) последовательности:
var ienumerable = inputObject as IEnumerable;
if (ienumerable != null)
{
var count = ienumerable.Cast<object>().Count();
}
Вызов Cast
, потому что из коробки нет Count
для не общего IEnumerable
.