VB.NET Если оператор делает что-то странное с Nullable Enum Type - PullRequest
0 голосов
/ 13 марта 2019

Я просто столкнулся со следующим поведением, которое настолько странно, что я не могу понять, как оно может быть правильным.

Предположим, у меня есть 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.

Что здесь происходит?

...