Как получить количество предметов из IList <>, полученных как объект?

В методе я получаю object.

В какой-то ситуации этот object может быть IList "что-то" (я не могу контролировать это "что-то").

Я пытаюсь:

  1. Определите, что этот объект является IList (чего-то)
  2. Переместите 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.