Просто хотят, чтобы кто-нибудь подтвердить свое мышление, я пробовал разные комбинации из переопределения Равно и GetHashCode в Foo класса:C# HashSet проверяет дубликат на Equals, а затем на GetHashCode?
class Foo
{
static int n;
public override bool Equals(object obj)
{
return true;
//return false;
}
public override int GetHashCode()
{
return 0;
//return n++;
}
}
то результат теста показал:
static void Main(string[] args)
{
HashSet<Foo> set = new HashSet<Foo>();
Foo f1 = new Foo();
Foo f2 = new Foo();
Console.WriteLine(f1.Equals(f2));
set.Add(f1);
Console.WriteLine(set.Contains(f2));
Console.ReadLine();
}
- Когда Equals истинно, Contains определяется GetHashCode;
- Когда Equals false, Contains всегда false.
Так Содержит определяется Равных затем GetHashCode, я прав?
Вы можете легко подтвердить свое мышление, добавив 'Console.WriteLine' к каждому переопределенному методу, чтобы увидеть порядок, в котором они отображаются. – ray