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

.NET Framework 4.8与.NET 7中数组比较结果差异的技术疑问

数组比较在.NET Framework 4.8与.NET 7中的差异解析

.NET Framework 4.8 代码行为

List<myObject> _myList = new List<myObject>();

_myList.ToArray() == _myList.ToArray() // 返回 false

.NET 7 代码行为

List<myObject> _myList = new List<myObject>();

_myList.ToArray() == _myList.ToArray() // 返回 true

差异合理性说明

这个差异是完全合理的,核心源于.NET 对数组==运算符的实现变更:

  • 在.NET Framework 及早期.NET Core版本中,数组作为引用类型,==运算符默认比较的是对象的内存引用地址。每次调用ToArray()都会生成全新的数组实例,内存地址不同,因此返回false。
  • 从.NET Core 3.0开始(包含.NET 5/6/7等后续版本),.NET 优化了一维数组的==运算符逻辑:当比较的是相同类型的一维数组时,会自动转为比较数组的内容是否完全匹配(效果等价于调用Enumerable.SequenceEqual())。空数组的内容完全一致,所以返回true。

需要注意:该优化仅适用于一维数组,多维数组的==仍会比较引用地址;如果myObject是自定义引用类型,只有当数组中对应位置的元素都满足==相等时,数组比较才会返回true。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:03:17