Рассмотрим этот код:
var str = (string)null;
При написании кода это мой код IL:
IL_0001: ldnull
И IL имеет оператор Cast, но:
var test = (string) new Object();
Код IL:
IL_0008: castclass [mscorlib]System.String
Так что литье null в string было проигнорировано.
Почему компилятор разрешил мне использовать null для определенного типа?