5

不変のデータ構造は第一級の値であるため、他の値と同様に、それらを等値または順序で比較できます。IEqualityComparer<T>しかし、すべての不変コレクションは/IComparer<T>インスタンスによってパラメーター化できるため、BCL 不変コレクション プレビューでは事態が複雑になりました。等式関係が非対称になるため、異なる比較子を持つ不変コレクションを比較することは許可されないようです (比較子自体には等式が定義されていないため)。

var xs = ImmutableList<string>.Empty.Add("AAA")
  .WithComparer(StringComparer.OrdinalIgnoreCase);

var ys = ImmutableList<string>.Empty.Add("aaa")
  .WithComparer(StringComparer.Ordinal);

Console.WriteLine(xs.Equals(ys)); // true
Console.WriteLine(ys.Equals(xs)); // false

この動作は何らかの方法で修正されますか?

4

1 に答える 1

3

平等を定義するのは難しいことであり、優秀なエンジニアの部屋でその定義についてコンセンサスを達成することはさらに困難です。:)実際には、不変コレクションのandメソッドから値の等価性を削除して、これらのメソッドが BCL および顧客コードの他のほとんどの型と同じ速度 (およびほとんど役に立たない) を提供するようにします。EqualsGetHashCode

将来のリリースで、不変コレクションに値等価メソッドを追加することを強く望んでいます。

于 2013-02-07T15:31:15.597 に答える