明示的なキータイプを使用して、一部のオブジェクトでLinqGroupByを実行しようとしています。私はIEqualityComparer
GroupByにを渡していないので、ドキュメントによると:
デフォルトの等式比較器
Default
は、キーを比較するために使用されます。
EqualityComparer<T>.Default
それはこのようにプロパティを説明します:
プロパティは、 typeがジェネリックインターフェイスを 実装している
Default
かどうかをチェックし、実装している場合は、その実装を使用するを返します。T
System.IEquatable<T>
EqualityComparer<T>
以下のコードでは、Fred
オブジェクトの配列をグループ化しています。FredKey
それらには、を実装する、と呼ばれるキータイプがありますIEquatable<FredKey>
。
グループ化を機能させるにはこれで十分ですが、グループ化は機能していません。以下の最後の行では、2つのグループが必要ですが、そうではありません。3つの入力項目を含む3つのグループがあります。
グループ化が機能しないのはなぜですか?
class Fred
{
public string A;
public string B;
public FredKey Key
{
get { return new FredKey() { A = this.A }; }
}
}
class FredKey : IEquatable<FredKey>
{
public string A;
public bool Equals(FredKey other)
{
return A == other.A;
}
}
class Program
{
static void Main(string[] args)
{
var f = new Fred[]
{
new Fred {A = "hello", B = "frog"},
new Fred {A = "jim", B = "jog"},
new Fred {A = "hello", B = "bog"},
};
var groups = f.GroupBy(x => x.Key);
Debug.Assert(groups.Count() == 2); // <--- fails
}
}