匿名関数がメソッドの引数として機能するのに、コンストラクターの引数では機能しないのはなぜですか?
を作成するList<string>
と、次の署名を持つSortメソッドがあります。
public void Sort(IComparer<T> comparer)
ここで、次のように機能します。
List<string> list = new List<string>();
list.Sort( (a,b) => a.CompareTo(b) );
SortedSetには、同様のシグネチャを持つコンストラクタがあります。
public SortedSet(IComparer<T> comparer)
ただし、コンストラクターで無名関数を使用すると、これは失敗します。以下は無効です。
SortedSet<string> set = new SortedSet<string>( (a, b) => a.CompareTo(b) );
ソートクラスの作成は期待どおりに機能します。
public class MyComparer : IComparer<string>
{
public int Compare(string a, string b)
{ return a.CompareTo(b); }
}
SortedSet<string> set = new SortedSet<string>( new MyComparer() );