Структура HashCode
Структура HashCode накапливает вклад
полей через Add и
отдаёт итог методом
ToHashCode.
Для пары значений удобен статический
Combine.
Пример
Давайте соберём хеш из int и string через Add:
using System;
class Program
{
static void Main()
{
var hc1 = new HashCode();
hc1.Add(1);
hc1.Add("abcde");
var hc2 = new HashCode();
hc2.Add(1);
hc2.Add("abcde");
Console.WriteLine(hc1.ToHashCode() == hc2.ToHashCode());
}
}
Результат выполнения кода:
True
Пример
Давайте сравним Combine для одинаковых аргументов:
using System;
class Program
{
static void Main()
{
int a = HashCode.Combine(1, 2);
int b = HashCode.Combine(1, 2);
Console.WriteLine(a == b);
}
}
Результат выполнения кода:
True
Пример
Давайте проверим, что разные поля меняют хеш:
using System;
class Program
{
static void Main()
{
int a = HashCode.Combine(1, "abcde");
int b = HashCode.Combine(2, "abcde");
Console.WriteLine(a == b);
}
}
Результат выполнения кода:
False
Пример
Давайте добавим bool после двух полей:
using System;
class Program
{
static void Main()
{
var hc1 = new HashCode();
hc1.Add(5);
hc1.Add("abcde");
hc1.Add(true);
var hc2 = new HashCode();
hc2.Add(5);
hc2.Add("abcde");
hc2.Add(true);
Console.WriteLine(hc1.ToHashCode() == hc2.ToHashCode());
}
}
Результат выполнения кода:
True
Смотрите также
-
метод
Add,
который добавляет очередное поле -
метод
Combine,
который комбинирует аргументы сразу -
метод
GetHashCode,
который переопределяют вместе с Equals -
метод
ToHashCode,
который завершает накопление