代码之家  ›  专栏  ›  技术社区  ›  Sergey Kalinichenko

如何抑制“可能的意外引用比较”警告?

  •  3
  • Sergey Kalinichenko  · 技术社区  · 9 年前

    在这种情况下,我得到了一个“可能的意外参考比较”:

    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 不同父母的对象被视为彼此不平等。如何告诉编译器我的意图,并抑制警告?

    1 回复  |  直到 9 年前
        1
  •  4
  •   Sergey Kalinichenko    9 年前

    尽管你可以使用 #pragma 要在这种情况下抑制警告,请使用 ReferenceEquals 提供了更好的替代方案:

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

    除了消除警告之外,这个选项还可以让其他阅读代码的程序员清楚地知道,引用比较是 一个错误。

    推荐文章