.NET 是否可以测试数组的等效性而不仅仅是相等的引用?

2024-03-09

var a = new double[] {1, 2, 3};
var b = new double[] {1, 2, 3};
System.Console.WriteLine(Equals(a, b)); // Returns false

但是,我正在寻找一种比较数组的方法,该方法会比较内部值而不是引用。 .NET 中有内置的方法可以做到这一点吗?

另外,虽然我理解Equals比较参考文献,GetHashCode也为这两个数组返回不同的值,我认为这不应该发生,因为它们具有相同的内部值。


我相信您正在寻找Enumerable.SequenceEqual<TSource>(IEnumerable<TSource>, IEnumerable<TSource>) http://msdn.microsoft.com/en-us/library/bb348567.aspx method.

var a = new double[] {1, 2, 3};
var b = new double[] {1, 2, 3};
System.Console.WriteLine(a.SequenceEqual(b)); // Returns true

至于 GetHashCode 返回不同值的问题,请记住您在这里处理的是两个不同的值。您不是在比较数组,而是在比较两个对数组的引用。

引用类型的默认相等比较需要保持一致。如果您需要发生其他事情,请记住有一个内置模型可以使用IEqualityComparer<T> http://msdn.microsoft.com/en-us/library/ms132151.aspx它允许您根据不遵循标准参考相等模式的特定需求定义自定义相等比较。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 是否可以测试数组的等效性而不仅仅是相等的引用? 的相关文章

随机推荐