я генерация 64-битное hashcodes из строк и хранение этого значения в базе данных64bit HashCodes, IEqualityComparer и Intersect/За исключением
Можно ли переопределить GetHashCode с 64 битным длинным типом вместо 32 байт междами?
Если это невозможно, возможно ли реализовать Equals и GetHashCode в другом месте и использовать Except и Intersect?
public class RecordComparer : IEqualityComparer<Record>
{
public bool Equals(Record x, Record y)
{
if (ReferenceEquals(x, y)) return true;
if (x == null || y == null) return false;
return x.RecordHash.Equals(y.RecordHash);
}
public long GetHashCode(Record obj)
{
return obj.RecordHash;
}
}
Неверно использовать хэши для равенства из-за хеш-коллизий. – AlexD
Это для 32-битных целых хеш-символов ... столкновение начинается после 100 000 записей. Однако 64-битные хэши гарантируют очень низкую скорость столкновения. – mrb398
«64-битные хешиты гарантируют очень низкую скорость столкновения»: да, они это делают. Но не _equality_. Для чего нужна правильная реализация 'IEqualityComparer' или 'Equals()'. –