我有一个名为“x”的类,它覆盖 Equals(),如下所示:
public override bool Equals(object obj)
{
if(obj is x)
{
return ((obj as x).key == this.key);
}
return false;
}
当以下扩展方法尝试使用上述覆盖进行比较时,不会使用 Equals():
public static bool Contains(this HashSet<x> set, char key)
{
x SearchKey = new x(key);
return set.Contains(SearchKey);
}
只有当我修改 extensio 方法中的第一行时,我才会得到预期的行为,如下所示:
x SearchKey = new x(key);
你能解释一下这种行为吗?
我曾预料到,Equals() 会针对 x 本身的实例被调用,因为它是 Object 的子集。我错过了什么?