В ряде ответов было отмечено, что использование свойства Value позволяет избежать отливки. Это правильно и отвечает на вопрос:
является то, что явное (MyEnum) отливать необходимо на примере типа «MyEnum?» ?
Однако мы не обратились в другую озабоченность:
Я просто чувствовал, параноидальный, что могло бы быть какая-то ошибка времени выполнения, если я только что сделал значение MyEnum = maybeValue в том, что если заявление.
Ну, во-первых, вы не можете просто присваивать значение nullable переменной своего базового типа. Вы должны сделать что-то, чтобы сделать преобразование явно.
Однако, если вы это сделаете так, как вы описали - сначала проверьте, есть ли значение, то это безопасно. (Конечно, никто не мутирует переменную, содержащую значение NULL между вызовом HasValue и выборкой значения.)
Если вы используете ILDASM или какой-либо другой инструмент для проверки сгенерированного кода, вы обнаружите, что литье значение nullable для его базового типа просто создается как доступ к свойству Value; использование оператора трансляции или доступ к свойству Value - это разница, которая фактически не имеет никакого значения. Атрибут свойства Value будет выдавать, если HasValue является ложным.
Используйте любой синтаксис, который вы чувствуете, выглядит лучше.Я лично, вероятно, выберу синтаксис «Значение» над синтаксисом броска, потому что, по-моему, он лучше читает «если он имеет значение, дайте значение», чем «если он имеет значение, преобразует его в свой базовый тип».
Благодарим за описание различий (или отсутствия такового) между проверкой нулевой и отличной отбрасывания по сравнению с использованием 'HasValue' /' Value'. –