Вы можете сравнить любой тип значения со значением NULL.Однако это всегда будет false, потому что тип значения никогда не может быть нулевым.
Что касается того, почему это разрешено, ВСЕ типы в .NET (включая те, которые наследуются более напрямую от System.ValueType) наследуются от System.Object, который определяет оператор ==.Это означает, что каждый тип может быть сравнен для ссылочного равенства.Однако ValueTypes никогда не будет иметь нулевое значение, потому что CLR всегда гарантирует на очень глубоких уровнях, что «ссылки» ValueType всегда имеют значение, даже если они помещены в штучную упаковку как ссылочные типы.