Не удается преобразовать System.Object [] в System.Collections.Generic.List - PullRequest
1 голос
/ 01 марта 2011

У меня есть метод с параметром объекта.

public bool ContainsValue(object value)

Я обнаружил, что преобразование объекта в IList работает.

IList<object> list = (IList<object>)value;

Однако преобразование его в List не дает.

List<object> Ilist = (List<object>)value;

Я посмотрел на определения IList и List, и они оба, кажется, реализуют интерфейсы Enumerator и Collection. Мне интересно, почему List не работает, а IList работает. Где в фреймворке происходит сбой и почему?

Ответы [ 3 ]

1 голос
/ 01 марта 2011

Не эксперт по C #, но может ли быть так, что IList - это интерфейс, а List - это реализация? Это может быть другая реализация IList ...

0 голосов
/ 08 июля 2011

Как уже говорили другие, у вас есть две проблемы:

  1. IList не обязательно List.
  2. Параметр для ContainsValue, вероятно, должен быть чем-тоболее конкретный, чем object.

Однако , если по какой-то причине параметр должен остаться и object, а вам требуется List, а не IList, вы можете сделать это:

using System.Linq;

...

List<object> list = ((IList<object>)value).ToList();
0 голосов
/ 01 марта 2011

Если объект реализует интерфейс IList, это не значит, что он на самом деле имеет тип List. Это может быть любой другой тип, реализующий интерфейс IList.

...