相关疑难解决方法(0)

为什么IEnumerable <T>在C#4中变得协变?

在早期版本的C#IEnumerable中定义如下:

public interface IEnumerable<T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)

从C#4开始,定义是:

public interface IEnumerable<out T> : IEnumerable
Run Code Online (Sandbox Code Playgroud)
  • 只是让LINQ表达式中令人讨厌的强制转换消失了吗?
  • 这不会引入与string[] <: object[]C#中的(破坏的数组方差)相同的问题吗?
  • 从兼容性的角度来看,如何完成协方差的增加?早期代码是否仍适用于更高版本的.NET,或者是否需要重新编译?反过来呢?
  • 以前使用此接口的代码在所有情况下都是严格不变的,或者某些用例现在可能会有不同的行为吗?

c# generics ienumerable language-design covariance

40
推荐指数
3
解决办法
5560
查看次数

标签 统计

c# ×1

covariance ×1

generics ×1

ienumerable ×1

language-design ×1