DateTime? tmp = new DateTime();
tmp = null;
return tmp.ToString();
Он возвращает String.Empty.
Правильно ли это?
Может быть, лучше будет поднимать исключение во второй строке кода
Ответ 1
Да, это правильно. Из документа
Текстовое представление значения текущего объекта Nullable<T>, если свойство HasValue равно true или пустая строка (""), если свойство HasValue является ложным.
Обратите внимание также, что Nullable<T>.Equals и Nullable<T>.GetHashCode не выбрасывают в этом случае, а Nullable<T>.GetType выполняет команду throw. Это связано с тем, что Object.Equals, Object.GetHashCode и Object.ToString переопределены для Nullable<T>, но это Object.GetType не является (поскольку оно не может быть таким, как оно не помечено как virtual).