如何在 Linq OrderBy 子句中应用默认的 IComparable<T>

Mik*_*ike 3 linq sql-order-by icomparablet

我有一个类型,它在实现IComparable<T>IComparable. 我没有从 LINQ 得到我期望的结果,基本上看起来好像IComparable<T>没有应用该类型实现的。

我以为我会用以下形式的表达式得到我想要的结果:

var result = MyEnumerable<T>.OrderBy(r => r); 
Run Code Online (Sandbox Code Playgroud)

其中T自身实现IComparable<T>。它没有发生。

我可以看到相关的问题,其中IComparable<T>为排序指定了特定的类,但我找不到一个使用自己IComparable<T>实现的默认值的问题T

我的语法显然不正确。请问正确的语法是什么?

提前致谢。

Chr*_*tte 5

OrderBy使用默认比较器Comparer<T>.Default,后者将默认使用IComparable<T>for的实现T,或者IComparable如果前者不存在则使用非泛型。

此代码有效:

public class Program
{
    static void Main(string[] args)
    {
        var list = new List<Stuff>
                       {
                           new Stuff("one"),
                           new Stuff("two"),
                           new Stuff("three"),
                           new Stuff("four")
                       };

        var sorted = list.OrderBy(x => x);

        foreach (var stuff in sorted)
        {
            Console.Out.WriteLine(stuff.Name);
        }
    }
}

public class Stuff : IComparable<Stuff>
{
    public string Name { get; set; }

    public Stuff(string name)
    {
        Name = name;
    }

    public int CompareTo(Stuff other)
    {
        return String.CompareOrdinal(Name, other.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)