假设你有成员是收藏,比如一个类。
public class Forest {
public IImmutableList<Tree> Trees { get; }
. . .
}
当我生成ReSharper的平等成员,该集合不会正确地比较。所生成的equals()方法,在比较集合时,使用在public static bool Equals(object objA, object objB)
定义Object
:
protected bool Equals(Forest other)
{
return Equals(Trees, other.Trees);
}
难道不应该使用Enumerable.SequenceEqual()
,像Trees.SequenceEqual(other.Trees)
?我是否需要手动更改生成的equals()使用Enumerable.SequenceEqual()
,还是有一种不需要修改生成的代码一些更好的办法?
ReSharper的不试图在收集执行深度平等收集支票,因为不知道该怎么做的每一个集合类型(以及究竟是“集合式”的意思?)。也最易变集合类型被表示具有复杂对象(存储元件平等comparers内部,例如),而不是简单的“值”(与不可变的集合),可以平等容易进行检查。
总是产生Enumerable.SequenceEquals()
是不是大部分时间是个好主意,因为它是在过于抽象IEnumerable<T>
界面操作 - 它甚至不检查集合.Count
提前返回false
。还使用IEnumerable<T>
接口枚举当一些为两个相等的台集般的集合不保证内容的顺序相同。
一些不可改变的藏品有平等的比较特殊的API(奇怪的是,ImmtableList
有没有这样的API,不像ImmutableHashSet.SetEquals
),但ReSharper的有这样的API没有专门的知识。有了这些想法,我们决定坚持object.Equals()
调用一代,让用户有明确意图的能力。也许我们应该产生生成的代码澄清这条评论...
你的具体情况,我建议比较qazxsw POI第一的qazxsw POI,使用后qazxsw POI。