如何实现多个CompareTo方法?

use*_*605 0 c# generics

我有一个自定义通用数组/容器,它有一个排序方法:

public void Sort()
{
    for (int i = 0; i < Count; i++)
    {
        int min = i;
        for (int j = i + 1; j < Count; j++)
            if (Items[j].CompareTo(Items[min]) < 0)
                min = j;

        if (min == i) continue;
        T temp = Items[i];
        Items[i] = Items[min];
        Items[min] = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

Items是T对象的数组.T实现IComparable并具有CompareTo方法:

public int CompareTo(object obj)
{
    if (!(obj is Player))
        return -1;

    Player player = (Player)obj;
    if (Name.CompareTo(player.Name) < 0)
        return -1;
    else if (Name.CompareTo(player.Name) == 0)
        return LastName.CompareTo(player.LastName);
    else
        return 1;
}
Run Code Online (Sandbox Code Playgroud)

Player类有3个属性:Name,LastName和Score.这可以很好地按名称和姓氏对元​​素进行排序,但现在我需要另一个应按分数排序的容器(第三个属性).如何在不使用List和内置OrderBy,Sort方法的情况下实现两种不同的比较方法

是否有可能以某种方式将类属性传递给Sort方法?

Container<Player> sortedByName = playerList.Sort(Name, LastName);
Container<Player> sortedByScore = playerList.Sort(Score);
Run Code Online (Sandbox Code Playgroud)

Ama*_*dan 7

不要用IComparable.这将创建知道如何比较自己的对象,始终使用相同的标准.

相反,做一个外部IComparer- 实际上是两个!知道如何按名称比较两个玩家的人,以及知道如何按分数比较他们的人.

您可以Sort 在此处查看如何使用标准.或者你可以把它放在你自己的使用Sort方法,通过更换Items[j].CompareTo(Items[min])comparer.Compare(Items[j], Items[min])