如何将IList转换为IList,其中SomeObject在C#4.0中使用协方差实现ISomeInterface
我有类似于以下的内容
IList<Items> GetItems;
IList<IItems> items = GetItems() as IList<IItems>;
但是项目为空;
这里的答案是针对4.0之前的:
Converting an array of type T to an array of type I where T implements I in C#
答案 0 :(得分:3)
为什么不简单地使用
IList<Items> GetItems;
IList<IItems> items = GetItems().Cast<IItems>().ToList();
答案 1 :(得分:2)
为了让你按照自己的想法工作,我相信IList必须被声明为协变,而不是列表中的项目。 IList不支持协方差。为支持协方差而更新的唯一.NET接口是:
来自http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx
答案 2 :(得分:0)
从技术上讲,以下内容可行,但我认为这不是你想要的......
IList<IItems> items = GetItems().ToArray() as IList<IItems>;