在这种情况下,我得到了“可能无意的参考比较”:
class Parent {
class Child : IEquitable<Child> {
private readonly int index;
private readonly Parent parent;
internal Child(Parent parent, int index) {
this.parent = parent;
this.index = index;
}
public override int GetHashCode() {
return parent.GetHashCode()*31 + index.GetHashCode();
}
public override bool Equals(object obj) {
Child other = obj as Child.
return other != null && Equals(other);
}
public override bool Equals(Child other) {
// The warning I get is on the next line:
return parent == other.parent && index == other.index;
}
}
...
}
然而,在这种情况下,参考比较是完全有意的,因为我希望不同父母的Child
个对象被认为是彼此不相等的。如何告诉编译器我的意图,并取消警告?
答案 0 :(得分:3)
虽然在这种情况下您可以使用#pragma
来取消警告,但使用ReferenceEquals
可以提供更好的选择:
public override bool Equals(Child other) {
return ReferenceEquals(parent, other.parent) && index == other.index;
}
除了使警告静音之外,此选项还使其他程序员清楚地阅读您的代码,引用比较是而不是错误。