2016-02-09 5 views
2

я получаю «возможное непреднамеренные ссылочное сравнение» в этой ситуации:Как подавить предупреждение о возможном непреднамеренном контроле ссылок?

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 объекты разных родителей, которые будут считаться неравным друг другом. Как сообщить компилятору о моем намерении и подавить предупреждение?

ответ

2

Хотя вы можете использовать #pragma подавить предупреждение в этой ситуации, используя ReferenceEquals обеспечивает лучшую альтернативу:

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

В дополнение к глушителей предупреждение, эта опция дает понять другим программистам чтения кода, которые ссылаются сравнение есть нет ошибка.