Я думаю, что лучший ответ о том, почему компилятор принимает это, относится к родовым классам. Рассмотрим следующий класс ...
public class NullTester<T>
{
public bool IsNull(T value)
{
return (value == null);
}
}
Если компилятор не принимал сравнения с null
для типов значений, тогда он существенно побил бы этот класс, имея неявное ограничение, связанное с его параметром типа (т. е. он будет работать только с типами, не основанными на стоимости).