在下面的代码:问题关于C#的协方差
interface I1 { }
class CI1: I1 { }
List<CI1> listOfCI1 = new List<CI1>();
IEnumerable<I1> enumerableOfI1 = listOfCI1; //this works
IList<I1> listofI1 = listOfCI1; //this does not
我能够分配我的“listOfCI1”到IEnumerable<I1>
(由于协方差)
但为什么我不能把它分配给一个IList<I1>
? 对于这个问题,我甚至不能做到以下几点:
List<I1> listOfI12 = listOfCI1;
不应该协方差让我分配一个派生类型的基本类型?
顺便说一句,那话很棒。 – 2010-10-27 14:51:22
@Arnis:谢谢 - 我自己喜欢它,即使我没有展示我录制的Hokey Cokey视频... – 2010-10-27 14:52:20
Jon,BCL团队也加入了IEnumerable(IEnumerable:IEnumerable),因为IEnumerable不允许你添加任何新成员(即它的不可变)使其安全。但另一方面,IList 没有添加“out”,因为它是可变的(可以在底层列表中添加不同的实现?) –
2010-10-27 17:46:31