[c#] Почему «null» Nullable <T> имеет хеш-код?



0 Answers

int? на самом деле просто сокращенно для Nullable<int> , структуры, которая обертывает тип int , чтобы позволить ему быть нулевым. Nullable может использоваться с любым типом значения.

Поскольку Nullable на самом деле является структурой (она не может быть нулевой), она должна возвращать что-то для хэш-кода, и обычно она возвращает хэш-код значения (предположительно, чтобы быть как можно более прозрачным для значения внутри). Когда значение равно null, оно жестко запрограммировано на возврат 0 по умолчанию:

public override int GetHashCode() {
    return hasValue ? value.GetHashCode() : 0;
}

См. here .

Question

Немного странный вопрос ...

Но может ли кто-нибудь дать мне обоснование, почему это ожидалось бы поведением?

Мне это кажется совершенно странным ...

//Makes perfect sense
object o = null;
o.GetHashCode().Dump();

NullReferenceException: Ссылка на объект не установлена ​​в экземпляр объекта.

//Seems very odd
int? i = null;
i.GetHashCode().Dump();

0

Это, очевидно, означает:

int? zero = 0;
int? argh = null;

zero.GetHashCode() == argh.GetHashCode(); //true



Related



Tags

c# c#   nullable