Задаването на Nullable Enum на $null в PowerShell причинява aSystem.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“ поради стойности на изброяване, които не са валидни. Посочете една от следните стойности на изброяване и опитайте отново. Възможните стойности на изброяване са „Червено, синьо, зелено“ ."
Причината, поради която бих искал да мога да използвам Nullable Enum, вместо Enum със стойност по подразбиране 0, е, че Enum, който искам да използвам, представлява колона на база данни с възможност за null, която се очаква да бъде 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