Effective C# 2nd Edition, Item 31 "Implement Ordering Relations with IComparable
英語ネイティブでないプログラマーにはいじめとも思われる.NET Frameworkライブラリです。
まず、自前の型を作成するとき、コレクションに入れてソートするならIComparable
最初にComparison
public struct Customer : IComparable<T>, IComparable { private readonly string name; private double revenue; : (中略) public static Comparison<Customer> CompareByRevenue { get { return (left, right) => left.revenue.CompareTo(right.revenue); } } }
と、いきなり難解なコードが出てきました。読みほぐすと、
- 静的(クラス)プロパティCompareByRevenueを定義
- このプロパティの型は、デリゲート型Comparison
に型パラメータCustomerを指定 - このプロパティはgetのみ定義
- getでは、ラムダ式を返却
ということのようです。
続くIComparer
private class RevenueComparer : IComparer<Customer> { int IComparer<Customer>.Compare(Customer left, Customer right) { return left.revenue.CompareTo(right.revenue); } } private static RevenueComparer revComp = null; public static IComparer<Customer> RevenueCompare { get { if (revComp == null) revComp = new RevenueComparer(); return revComp; } }
- IComparer
に型パラメータCustomerを適用し、これを実装する内部クラスRevenueComparerを定義 - IComparer
に型パラメータCustomerを適用し、この型の静的プロパティRevenueCompareを定義
かなりに難解です。また、なぜにComparison