gpt4 book ai didi

c# - 具有相同元素的两个列表不相等。为什么?

转载 作者:太空狗 更新时间:2023-10-30 00:10:01 26 4
gpt4 key购买 nike

我有以下内容:

  var a = new List<OrderRule> {
new OrderRule("name", OrderDirection.Ascending),
new OrderRule("age", OrderDirection.Descending)
};


var b = new List<OrderRule> {
new OrderRule("name", OrderDirection.Ascending),
new OrderRule("age", OrderDirection.Descending)
};

var r = a.Equals(b);

即使两个列表包含彼此相等的项目,r 变量也为假。 OrdeRule 类实现 IEquality。请注意,当 Direction 和 Property 都相等时,两个 OrderRules 相等。

public enum OrderDirection { ASC, DESC }

public class OrderRule : IEquatable<OrderRule> {

public OrderDirection Direction { get; }
public String Property { get; }

public OrderRule(String property, OrderDirection direction) {
Direction = direction;
Property = property;
}

public Boolean Equals(OrderRule other) {

if (other == null)
return false;

return Property.Equals(other.Property) && Direction.Equals(other.Direction);

}

public override Boolean Equals(Object obj) {

if (ReferenceEquals(null, obj))
return false;

if (ReferenceEquals(this, obj))
return true;

if (obj.GetType() != GetType())
return false;

return Equals(obj as IncludeRule);

}

public override Int32 GetHashCode() {

return HashCode.Of(Property).And(Direction);

}

}

我错过了什么?

最佳答案


检查两个列表是否相等并不意味着检查它们是否包含相同的项目。

如果你这样做:

var a = new List<OrderRule>();
var b = new List<OrderRule>();
var r = a.Equals(b); //false

r 将始终为 false,即使两个列表中包含相同的项目也是如此。那是因为您没有检查列表的内容。您实际上是在检查 ab 是否引用同一个对象。但是 a 是一个对象而 b 是另一个对象。

如果您这样做,r 将为真:

var a = new List<OrderRule>();
var b = a;
var r = a.Equals(b) //true

如果您有两个列表,并且您想查看它们是否包含相同顺序的相同项目,您可以这样做:

var r = a.SequenceEquals(b);

在您问题的示例中,r 将是 true,因为您要覆盖 OrderRule 上的 Equals,因此一个列表中的项目被认为与另一个列表中的项目“相等”。


知道了 - 您在 OrderRule 中的相等性检查被破坏了。

public override Boolean Equals(Object obj) {
if (ReferenceEquals(null, obj))
return false;

if (ReferenceEquals(this, obj))
return true;

if (obj.GetType() != GetType())
return false;

return Equals(obj as IncludeRule);
}

我认为 return Equals(obj as IncludeRule) 你的意思是 return Equals(obj as OrderRule)

关于c# - 具有相同元素的两个列表不相等。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38151576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com