Как получить количество элементов из IList <>, полученного как объект? - PullRequest
11 голосов
/ 25 января 2012

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

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

Я пытаюсь:

  1. Определите, что этот объект является IList (чего-то)
  2. Измените object на "IList<something>", чтобы получить от него Count.

Пока я застрял и ищу идеи.

Ответы [ 4 ]

20 голосов
/ 25 января 2012

Вы можете проверить, реализует ли object IList, используя is.

Затем вы можете разыграть object до IList, чтобы получить счет.

object myObject = new List<string>();

// check if myObject implements IList
if (myObject  is IList)
{
   int listCount = ((IList)myObject).Count;
}
4 голосов
/ 25 января 2012
if (obj is ICollection)
{
    var count = ((ICollection)obj).Count;
}
1 голос
/ 25 января 2012
        object o = new int[] { 1, 2, 3 };

        //...

        if (o is IList)
        {
            IList l = o as IList;
            Console.WriteLine(l.Count);
        }

Это печатает 3, потому что int [] является IList.

0 голосов
/ 25 января 2012

Поскольку все, что вам нужно, это счетчик, вы можете использовать тот факт, что все, что реализует IList<T>, также реализует IEnumerable; и, кроме того, в System.Linq.Enumerable есть метод расширения, который возвращает количество любой (общей) последовательности:

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

Вызов Cast происходит потому, что из коробки нет Count для неуниверсального IEnumerable.

...