gpt4 book ai didi

C# IComparer 标准用法问题

转载 作者:太空狗 更新时间:2023-10-30 00:12:39 25 4
gpt4 key购买 nike

我想知道这是否是在 C# 中使用 IComparer 的标准。假设我有一个情况,其中有三个 Person 对象:P1、P2 和 P3。假设我调用传入 P1 和 P2 的 Compare 方法,结果为 0。这实质上意味着两个人应该被归类为平等。现在假设我调用传入 P2 和 P3 的 Compare 方法,结果也是 0。同样,这意味着两个人是平等的。从逻辑上讲,可以假设 P1 和 P3 也相等;但是,可以实现 Compare 方法,但是有人决定实现它。那么,在这种情况下,P1 和 P3 也将返回 0 的实现方式是否是一种标准?

这是我要问的代码:

// Assume these are initialized properly
Person p1 = null, p2 = null, p3 = null;
IComparer<Person> comparer = null;

// Compare person 1 to person 2 and result is 0
Debug.Assert(comparer.Compare(p1, p2) == 0);

// Compare person 2 to person 3 and result is 0
Debug.Assert(comparer.Compare(p2, p3) == 0);

// Would this be a fair assumption that person 1 and person 3 would also be 0?
Debug.Assert(comparer.Compare(p1, p3) == 0);

最佳答案

它与 C# 无关,它是一个简单的数学规则:传递性: http://en.wikipedia.org/wiki/Transitive_relation

所以,简而言之。

--- 由于评论而添加的信息---

如果您去阅读有关 IComparer 的文档: http://msdn.microsoft.com/en-us/library/system.collections.icomparer.compare.aspx

你会看到:

Compares two objects and returns a value indicating whether one is less than, 
equal to, or greater than the other.

换句话说,这意味着当比较对象“a”和“b”时,多次调用 Compare 方法时应该总是得到相同的结果。如果不是这种情况,则意味着您将获得未定义的行为,并且不可能依赖该函数进行任何排序或比较。

因此,当您正确实现此方法时,传递性规则适用,您可以毫无疑问地说 a == c。

我希望澄清您对实现问题的质疑。

关于C# IComparer<T> 标准用法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3311034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com