使用比较来比较

Use Comparison to compare

提问人:paparazzo 提问时间:6/4/2018 更新时间:6/4/2018 访问量:81

问:

我知道如何将比较传递给排序。

我想用 Comparison 比较两个对象。我该怎么做?

该类已实现 IComparible。这是用于自定义比较的。

C# .NET 比较 icomparable

评论


答:

1赞 Ismael Medeiros 6/4/2018 #1

比较是一个委托,用于定义比较方法应如何返回以及应接收哪些参数。在此示例中,它创建方法 CompareDinosByLength 来实现 Comparison 委托。

如果要比较对象,应按以下方式实现方法:

public static int CompareObjects(MyClass a, MyClass b) {
    if (a < b) { // Make your comparison logic here.
         return -1;
    } else if (a == b) {
         return 0;
    } else {
         return 1;
    }
}

创建此方法的唯一限制是返回值必须遵循此模式(当 x < y 时为 -1,x = y 时为 0,x > y 时为 +1)。

要添加到排序方法中,只需将方法的名称作为参数传递给 Sort() 方法:

list.Sort(CompareObjects);

剩下的工作将由 C# 完成。

评论

0赞 paparazzo 6/4/2018
正如我所说,我知道如何将比较传递给排序。我想将比较传递给对象(或对象方法),以便对象可以引用比较。
0赞 Ismael Medeiros 6/4/2018
我认为您可以声明您的类的委托,该委托已经指定了 paremeters 的类型,就好像该方法的某个字段一样。之后,您可以声明某个字段,其“类型”为 ComparisonDelegate。或者,您可以创建一个方法 Sort(ComparisonDelegate delegate) 并将此委托传递给 Sort() 方法。委托可以像 Sort 接收方法一样接收方法。public delegate ComparisonDelegate(MyClass a, MyClass b);
0赞 paparazzo 6/4/2018
我不想用它来排序。我正在寻找对象到对象的比较。
0赞 Ismael Medeiros 6/4/2018
对不起,我误会你了。如何使用您想要的 Comparisorison 委托进行这种比较?它会是 IComparable 方法中的 CompareTo() 方法吗?还是在其他方法中?甚至覆盖运算符(>、<、==、<=、>=)?
0赞 paparazzo 6/4/2018
返回 -1, 0, 1 的标准比较。我可能已经想通了。我要发布我所拥有的。