2014-09-26 2 views
1

Есть ли разница между Nullable.Value и (<whatEverType>) Nullable? Насколько я знаю, оба метода возвращают NULL, если значение не задано или само значение.литье Nullable to ValueType

например:

DateTime? date = DateTime.Now; 
DateTime now = (DateTime) date; 
DateTime now2 = date.Value; 
+0

Можете ли вы предоставить код для компиляции? –

+2

"оба метода возвращают NULL, если значение не задано или само значение." Неа. Он бросает 'InvalidOperationException' в обоих случаях, когда значение не задано. –

+0

_ «Насколько я знаю, оба метода возвращают NULL» _ Теперь, когда вы уже предоставили компиляционный код, почему вы не подтвердили это утверждение? –

ответ

7

Нет, нет никакой разницы. Вы получите InvalidOperationException в обоих случаях, когда значение не установлено. Более того, здесь является реализация оператора литом внутри Nullable<T>:

public static explicit operator T(Nullable<T> value) { 
    return value.Value; 
} 

(декомпилированы с Resharper)

Таким образом, оператор приведения использует Value элемент.

+0

Aaaah, Спасибо за этот ответ ... Я пропустил исключение, которое было выброшено, когда значение не установлено. – HimBromBeere

+0

Не уверен, что это связано с инкрустацией или умением, но компилятор получает член 'Value' в обоих случаях. – IllidanS4

+0

@ IllidanS4 Я думаю, что это связано с inlining. –

Смежные вопросы