ReSharper的能产生平等成员,正确地比较收集成员?

问题描述 投票:0回答:1

假设你有成员是收藏,比如一个类。

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(),还是有一种不需要修改生成的代码一些更好的办法?

collections resharper equals
1个回答
1
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.