Установка Nullable Enum в $null в PowerShell вызывает исключениеSystem.Management.Automation.PSInvalidCastException
. Это неожиданно (по крайней мере для меня). Есть ли этому разумное объяснение? Вот пример, который показывает, как установка Nullable Int32 выполняется успешно, но установка Nullable Enum вызывает исключение:
Add-Type @"
public enum ColorEnum
{
Red = 1,
Blue = 2,
Green = 3,
}
public class Thing
{
public ColorEnum? NullableColor = ColorEnum.Blue;
public System.Int32? NullableInt = 123;
}
"@
$test = New-Object Thing
# Setting the Nullable Int32 to $null works, as expected.
$test.NullableInt = $null
# Setting the Nullable Enum to $null causes exception.
$test.NullableColor = $null
Сообщение об исключении гласит:
Настройка исключения "NullableColor": "Невозможно преобразовать null в тип "ColorEnum" из-за недопустимых значений перечисления. Укажите одно из следующих значений перечисления и повторите попытку. Возможные значения перечисления: "Red, Blue, Green" ."
Причина, по которой я хотел бы иметь возможность использовать Nullable Enum, а не Enum со значением по умолчанию 0, заключается в том, что Enum, который я хочу использовать, представляет столбец базы данных, допускающий значение NULL, который, как ожидается, будет нулевым, если не установлено допустимое значение. . Я не могу изменить модель базы данных, поэтому, к сожалению, кажется, что решением может быть использование Int32 вместо Enum.
Кто-нибудь еще испытал это? Возможно, это ошибка?
$PsVersionTable:
Name Value
---- -----
PSVersion 3.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.18444
BuildVersion 6.2.9200.16481
PSCompatibleVersions {1.0, 2.0, 3.0}
PSRemotingProtocolVersion 2.2