Я просто столкнулся со следующим поведением, которое настолько странно, что я не могу понять, как оно может быть правильным.
Предположим, у меня есть Enum, как;
Enum MyEnum
...
End Enum
и подпрограмма, которая возвращает значение NULL этого типа enum. Это обнуляемо, потому что моя логика проверяет определенную строку, чтобы увидеть, содержит ли она значение. Если да, я хочу сопоставить его с этим перечислением, а если нет, я возвращаю Nothing, чтобы указать, что значения не было:
Shared ReadOnly Property Phase As MyEnum?
Get
syntax 1 -->
Return If(myString.IsNotBlank, myString.ToEnum(Of MyEnum), Nothing)
syntax 2 -->
If myString.IsNotBlank Then
Return myString.ToEnum(Of MyEnum)
Else
Return Nothing
End If
End Get
End Property
Я бы подумал, что два синтаксиса идентичны, но это не так. Синтаксис # 2 делает то, что я хочу. Но синтаксис # 1 делает что-то другое. Если значение пустое, вместо возврата Nothing, то есть Nullable(Of MyEnum)
с HasValue = False, возвращается пустое Enum со значением 0, независимо от того, имеет ли MyEnum
элемент со значением 0.
Что здесь происходит?