ObservableCollection.Contains() Doesn't Work Correctly

前端 未结 4 1359
时光说笑
时光说笑 2021-01-13 00:55

Consider the following:

class Bind
{
    public string x { get; set; }
    public string y { get; set; }
}
public partial class MainWindow : Window
{
    pub         


        
4条回答
  •  粉色の甜心
    2021-01-13 01:20

    The 'Contains' method uses the Equals on object, and this simply checks that the memory addresses are different.

    Consider changing your class to this...

     class Bind : IEquatable {
         public string x { get; set; }
         public string y { get; set; }
         public bool Equals(Bind other)
         {
             return x == other.x && y == other.y; 
         } 
    }
    

    Your loop will then visit the strongly typed Equals method in your class, and this will result in the behaviour you are after.

    NOTE: the string class ALSO inherits from IEquatable of T and that is what allows the equality operator to operate on the content of the string rather than the address of the string.

提交回复
热议问题