我注意到 .NET 4 中添加了这两个接口以及几个相关的类。它们对我来说似乎有点多余;我读过几篇关于它们的博客,但我仍然不明白它们解决了哪些在 .NET 4 之前很棘手的问题。
有什么用IStructuralEquatable
and IStructuralComparable
?
.NET 中的所有类型都支持Object.Equals()
方法,默认情况下比较两种类型引用相等。然而,有时,也希望能够比较两种类型结构平等.
最好的例子是数组,它在 .NET 4 中现在实现了IStructuralEquatable
界面。这样就可以区分比较两个数组是为了引用相等,还是为了“结构相等”——它们是否具有相同数量的项目,并且在每个位置具有相同的值。这是一个例子:
int[] array1 = new int[] { 1, 5, 9 };
int[] array2 = new int[] { 1, 5, 9 };
// using reference comparison...
Console.WriteLine( array1.Equals( array2 ) ); // outputs false
// now using the System.Array implementation of IStructuralEquatable
Console.WriteLine(
StructuralComparisons.StructuralEqualityComparer.Equals( array1, array2 )
); // outputs true
实现结构相等/可比较性的其他类型包括元组和匿名类型——它们都明显受益于基于其结构和内容执行比较的能力。
你没有问的一个问题是:
为什么我们有IStructuralComparable
and IStructuralEquatable
当已经有
存在于IComparable
and IEquatable
接口?
我要提供的答案是,一般来说,最好区分参考比较和结构比较。通常预计如果您实施IEquatable<T>.Equals
你也将覆盖Object.Equals
保持一致。在这种情况下,您将如何支持引用平等和结构平等?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)