如何禁止显示“可能的意外引用比较”警告

本文关键字:引用 意外 比较 警告 禁止显示 | 更新日期: 2023-09-27 18:34:02

在这种情况下,我得到了"可能的意外引用比较":

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对象被视为彼此不平等。如何告诉编译器我的意图,并禁止显示警告?

如何禁止显示“可能的意外引用比较”警告

尽管在这种情况下可以使用#pragma来禁止显示警告,但使用 ReferenceEquals 提供了更好的替代方法:

public override bool Equals(Child other) {
    return ReferenceEquals(parent, other.parent) && index == other.index;
}

除了使警告静音之外,此选项还向阅读您的代码的其他程序员清楚地表明引用比较不是错误。