为何IEnumerator.Current未设为可空类型?可空引用类型引入后未修改的原因
为什么非泛型
IEnumerator.Current返回类型未改为object? - 兼容性是核心考量:非泛型
IEnumerator和IEnumerable是.NET早期就存在的基础接口,已有海量老项目和类库依赖Current返回object类型。如果将返回类型改为object?,所有直接使用该属性的现有代码都会触发空值引用警告,严格模式下甚至无法编译,这会给开发者带来极高的迁移成本,违背了.NET团队对兼容性的核心承诺。 - 设计上的权衡取舍:虽然非泛型集合确实允许存储
null,但可空引用类型的推出原则是尽可能不破坏现有代码生态。团队没有修改老接口,而是通过代码分析规则、官方文档提示等方式,引导开发者在使用非泛型枚举器时自行做空值检查。 - 泛型接口已提供更优方案:.NET早就推出了泛型版本的
IEnumerator<T>和IEnumerable<T>,这些接口在可空引用类型引入时已经适配了可空类型(比如IEnumerator<string?>)。如果追求更安全的空值处理,开发者完全可以优先使用泛型接口,非泛型接口更多是为兼容遗留代码而保留。
内容的提问来源于stack exchange,提问作者palapapa
相关产品推荐
相关产品推荐

