Comparer <T>.在.NET 4中创建

Ray*_*rof 3 c# .net-4.0

我在.Net 4.5中创建了一个Comparer:

public static Comparer<Room> RoomComparer = 
  Comparer<Room>.Create((a, b) => a.RoomId.CompareTo(b.RoomId))
Run Code Online (Sandbox Code Playgroud)

如何在c#.NET 4.0中创建Comparer?

Iva*_*oev 8

您可以使用以下内容

public static class Comparer
{
    public static Comparer<T> Create<T>(Comparison<T> comparison)
    {
        if (comparison == null) throw new ArgumentNullException("comparison");
        return new ComparisonComparer<T>(comparison);
    }
    private sealed class ComparisonComparer<T> : Comparer<T>
    {
        private readonly Comparison<T> comparison;
        public ComparisonComparer(Comparison<T> comparison)
        {
            this.comparison = comparison;
        }
        public override int Compare(T x, T y)
        {
            return comparison(x, y);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样

public static Comparer<Room> RoomComparer = 
  Comparer.Create<Room>((a, b) => a.RoomId.CompareTo(b.RoomId))
Run Code Online (Sandbox Code Playgroud)


Ric*_*der 5

public class RoomComparer: IComparer<Room>
{
    int Compare(Room a, Room b)  
    {
        return  (a == null && b == null) ? 0
            : (a == null) ? -1
            : (b == null) ? 1
            : a.RoomId.CompareTo(b.RoomId);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 理查德,你可能会考虑更新你的答案——`(b == null)` 的情况应该真正返回 `1`。另外我认为检查 `(a == null &amp;&amp; b == null)` 最好是 `a == b`。 (2认同)