You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何IEnumerator.Current未设为可空类型?可空引用类型引入后未修改的原因

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

内容的提问来源于stack exchange,提问作者palapapa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:12:38