Как CLR может обойти генерацию ошибки при присвоении структуре значения null?

Я пытаюсь понять одну вещь в этом коде:

Nullable x = 5;
Nullable y = null;
Console.WriteLine("x: HasValue={0}, Value={1}",  x.HasValue, x.Value);
Console.WriteLine("y: HasValue={0}, Value={1}",  y.HasValue, y.GetValueOrDefault());

И вывод:

x: HasValue=True, Value=5
y: HasValue=False, Value=0

И то, что я не понимаю, когда вы передаете nullк y, я полагаю, что он вызывает общедоступный статический неявный оператор Nullable(T value), но определение этого метода инициализирует новую структуру, передавая значение, которая присваивается null, однако метод конструктора не проверяет, является ли он нулевым или нет, поэтому он может присвоить default(T)значение .

Как получилось мы можем даже присвоить null структуре здесь, и это работает нормально?

Можете ли вы, ребята, что я здесь упускаю? Я не понимаю, как это просто обошло nullи вернуло значение по умолчанию.

Внутреннее определение нулевого кода:

http://codepaste.net/gtce6d

5
задан Tarik 3 June 2012 в 05:28
поделиться