I have a type which has a default sort order as it implements IComparable<T>
and IComparable
. I'm not getting the results I expect from LINQ , basically it looks as if the IComparable<T>
which the type implements is not being applied.
I thought I would get the result I want with an expression in the form:
var result = MyEnumerable<T>.OrderBy(r => r);
where T
itself implements IComparable<T>
. It's not happening.
I can see related questions where specific IComparable<T>
classes are specified for the sort, but I can't find one which uses the default IComparable<T>
implemented by T
itself.
My syntax is clearly incorrect. What is the correct syntax please?
Thanks in advance.
OrderBy
uses the default comparer Comparer<T>.Default
which in turn will default to use the IComparable<T>
implementation for T
, or the non-generic IComparable
if the former does not exist.
This code works:
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);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With