gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:20:37 25 4
gpt4 key购买 nike

我有一个对象集合:

 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com