我有一个对象集合:
IEnumerable<Triangle>
这些对象支持接口(interface) IShape
但我在尝试将其传递到要求的函数时遇到错误:
IEnumerable<IShape>
- 为什么我不能传递这个?
- 是否有任何解决方法可以将一个转换为另一个以使其正常工作?
最佳答案
在 .NET 4 中,这应该被支持,如 IEnumerable<T>
被声明为协变的,即声明实际上是 IEnumerable<out T>
.在 .NET 3.5 中,情况并非如此,您需要使用诸如
triangles.Cast<IShape>()
(值得注意的是,这也是一种语言特性的演变;也就是说,如果您以某种方式能够将 C# 3 与 .NET 4 结合使用,它仍然无法正常工作,因为没有将对协变和逆变的支持添加到C# 直到该语言的第 4 版。)
可以在 Jon Skeet 的 C# in Depth 中找到协变和逆变的出色解释。 , 第 13.3 节。
关于c# - 无法将 IEnumerable<Triangle> 传递到正在寻找 IEnumerable<IShape> 的函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5696420/