Consider the following:
class Bind
{
public string x { get; set; }
public string y { get; set; }
}
public partial class MainWindow : Window
{
pub
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<Bind> {
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.
You should inform about comparer:
"Elements are compared to the specified value by using the default equality comparer, Default."
In EqualityComparer.Default Property you can see an example.
Because "a" != "a"
. At least, not always.
Contains()
will check memory addresses, not the actual contents. You cannot insert the same object twice, and "a"
isn't the same object as "a"
(at least, not here).
Because that you have added that value set to CX:
cX.Add(new Bind { x = "a", y = "1" });
and to CY:
cY.Add(new Bind { x = "a", y = "1" });
And those are different objects.
If you want to see if a given key is present, you will need to change to a dictionary or use Linq.