Как преобразовать IList в IList, где SomeObject реализует ISomeInterface, используя ковариацию в C # 4.0
У меня есть что-то похожее на следующее
IList<Items> GetItems; IList<IItems> items = GetItems() as IList<IItems>;
, но элементы имеют значение null;
Ответ здесь был для до 4.0:
Преобразование массива типа T в массив типа I, где T реализует I в C #
почему бы просто не использовать
IList<Items> GetItems; IList<IItems> items = GetItems().Cast<IItems>().ToList();
Чтобы это работало так, как вы думаете, я считаю, что IList должен быть объявлен как ковариантный, а не элементы в списке. И IList не поддерживает ковариацию. Единственные интерфейсы .NET, которые были обновлены для поддержки ковариации:
Это от http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx
Технически, следующее будет работать, но я не думаю, что это именно то, что вы ищете ...
IList<IItems> items = GetItems().ToArray() as IList<IItems>;