Задаване на Nullable Enum на $null - това наистина ли трябва да причини PSInvalidCastException?

Задаването на 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     

person robbsville    schedule 05.11.2014    source източник
comment
Прилича ми на бъг. Можете да го изпратите тук - connect.microsoft.com/PowerShell/Feedback   -  person Roman Kuzmin    schedule 05.11.2014
comment
И на мен ми прилича на бъг. GJ в намирането му. Ето връзка с повече информация за nullable enums: stackoverflow.com/questions/4337193/how-to-set-enum-to-null   -  person Micky Balladelli    schedule 05.11.2014


Отговори (1)


Това беше грешка в PowerShell 4 (и вероятно 3, но не съм го пробвал).

Беше коригирано в PowerShell V5 (проверено спрямо скорошни вътрешни компилации), вярвам, че трябва да бъде коригирано в публични компилации като предварителния преглед на септември WMF5 или Windows 10 предварителен преглед.

person Jason Shirk    schedule 05.11.2014