由於不可變的數據結構是一流的值,所以我們可以比較它們的相等性或順序,就像我們對任何其他值所做的一樣。但BCL不可變集合預覽中的事情變得複雜起來,因爲每個不可變集合都可以通過參數化爲IEqualityComparer<T>
/IComparer<T>
實例。貌似不同comparers不可改變的集合不應該被允許進行比較(因爲平等不是comparers本身定義的),因爲它使平等關係的非對稱: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
將這種行爲以某種方式固定?
既然他們有不同的平等,你會如何解決它?它有點合理,它使用第一個操作數的比較器 - 我不知道我可以稱它爲一個bug ... –
這讓我很難解決。這是一個CTP。唯一能解決這個問題的方法就是當你通過CTP的指定反饋渠道提供反饋時。博客文章中有一個鏈接,「請求反饋部分」。 http://blogs.msdn.com/b/bclteam/archive/2012/12/18/preview-of-immutable-collections-released-on-nuget.aspx –
我傾向於贊同Marc的推理。 –