Метод GetHashCode
Метод GetHashCode интерфейса
IEqualityComparer<T>
возвращает число для хеш-таблиц. Для равных
по Equals объектов код должен совпадать.
Синтаксис
int code = comparer.GetHashCode(obj);
Пример
Давайте получим хеш числа:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
int code = EqualityComparer<int>.Default.GetHashCode(5);
Console.WriteLine(code == EqualityComparer<int>.Default.GetHashCode(5));
}
}
Результат выполнения кода:
True
Пример
Давайте сравним хеши разных int:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
int a = EqualityComparer<int>.Default.GetHashCode(1);
int b = EqualityComparer<int>.Default.GetHashCode(2);
Console.WriteLine(a == b);
}
}
Результат выполнения кода:
False
Пример
Давайте сравним хеши разных строк:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
int a = EqualityComparer<string>.Default.GetHashCode("abcde");
int b = EqualityComparer<string>.Default.GetHashCode("12345");
Console.WriteLine(a == b);
}
}
Результат выполнения кода:
False
Пример
Давайте проверим согласованность с Equals:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var cmp = EqualityComparer<int>.Default;
Console.WriteLine(cmp.GetHashCode(3) == cmp.GetHashCode(3));
}
}
Результат выполнения кода:
True
Смотрите также
-
метод
Equals,
который определяет равенство объектов -
интерфейс
IEqualityComparer,
который объединяет Equals и GetHashCode -
класс
EqualityComparer,
который предоставляет Default -
интерфейс
IEquatable,
который задаёт Equals без упаковки