c# - 无法将 IEnumerable<Triangle> 传递到正在寻找 IEnumerable<IShape> 的函数中

标签 c# .net-3.5 interface ienumerable

我有一个对象集合:

 IEnumerable<Triangle>

这些对象支持接口(interface) IShape 但我在尝试将其传递到要求的函数时遇到错误:

 IEnumerable<IShape>
  1. 为什么我不能传递这个?
  2. 是否有任何解决方法可以将一个转换为另一个以使其正常工作?

最佳答案

在 .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/

相关文章:

c# - ^ 运算符是做什么的?

c# - 找到围绕某个点形成四面体的 4 个点

c# - 数据集和 XML 代替正确的数据库 : Not a good idea?

c# - 如何检测安装的 MS-Office 版本?

java - 如何更改 Java 中按钮的外观

c# - 解析和序列化

c# - PaintEvent内存泄漏

interface - 如何组播发送到所有网络接口(interface)?

.net - Windows 服务已启动但不执行任何操作 - .NET

c# - 接口(interface)函数 C#