Как мне реализовать мой специальный заказ как CompareTo - PullRequest
1 голос
/ 30 ноября 2011

Итак, у меня есть следующее struct

public struct Foo
{
    public readonly int FirstLevel;
    public readonly int SecondLevel;
    public readonly int ThirdLevel;
    public readonly int FourthLevel;
}

Где-то я делаю следующее

var sequence = new Foo[0];
var orderedSequence = sequence
    .OrderBy(foo => foo.FirstLevel)
    .ThenBy(foo => foo.SecondLevel)
    .ThenBy(foo => foo.ThirdLevel)
    .ThenBy(foo => foo.FourthLevel);

Теперь я хотел бы реализовать System.IComparable<Foo>, например.преимущество .Sort() из Foo[].

Как перенести логику (из моего специального / проводного OrderBy / ThenBy) в int CompareTo(Foo foo)?

1 Ответ

5 голосов
/ 30 ноября 2011

Как насчет чего-то вроде:

public struct Foo : IComparable<Foo>
{
    public readonly int FirstLevel;
    public readonly int SecondLevel;
    public readonly int ThirdLevel;
    public readonly int FourthLevel;

    public int CompareTo(Foo other)
    {
        int result;

        if ((result = this.FirstLevel.CompareTo(other.FirstLevel)) != 0)
            return result;
        else if ((result = this.SecondLevel.CompareTo(other.SecondLevel)) != 0)
            return result;
        else if ((result = this.ThirdLevel.CompareTo(other.ThirdLevel)) != 0)
            return result;
        else 
            return this.FourthLevel.CompareTo(other.FourthLevel);
    }
}
...