2014-11-05 15 views
7

Wenn Sie in PowerShell eine Nullable Enum auf $ null setzen, wird eine Ausnahme System.Management.Automation.PSInvalidCastException ausgelöst. Das ist unerwartet (zumindest für mich). Gibt es dafür eine vernünftige Erklärung? Hier ist ein Beispiel, das zeigt, wie ein Nullable Int32 erfolgreich Einstellung, sondern eine Nullable Enum Einstellung eine Ausnahme verursacht:

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 

Die Ausnahmemeldung lautet:

Ausnahme Einstellung „NullableColor“: „Can not Konvertieren von null in den Typ "ColorEnum" aufgrund ungültiger Aufzählungswerte Geben Sie einen der folgenden Aufzählungswerte ein und versuchen Sie es erneut. Die möglichen Aufzählungswerte sind "Rot, Blau, Grün". "

Der Grund Ich mag wäre in der Lage sein, ein Nullable Enum zu verwenden, anstatt eine Enum mit einem Standardwert von 0, ist, weil die Enum ich einen Nullable-Datenbankspalt darstellt verwenden mag, die voraussichtlich sein null, wenn kein gültiger Wert festgelegt ist. Ich kann das Datenbankmodell nicht ändern, daher fühlt es sich so an, als ob die Lösung darin besteht, ein Int32 anstelle eines Enums zu verwenden.

Hat jemand anderes das erlebt? Ist es vielleicht ein Fehler?

$ 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  
+0

Es sieht aus wie ein Fehler für mich. Sie können es hier einreichen - https://connect.microsoft.com/PowerShell/Feedback –

+1

Sieht für mich auch wie ein Fehler aus. GJ, es zu finden. Hier ist ein Link mit mehr über Nullable enums: http://StackOverflow.com/Questions/4337193/How-to-set-enum-to-null –

Antwort

5

Das war ein Fehler in Powershell 4 (und wahrscheinlich 3, aber ich habe es nicht ausprobiert).

Es wurde in PowerShell V5 behoben (verifiziert gegen die letzten internen Builds), ich glaube, es sollte in öffentlichen Builds wie der September WMF5 Vorschau oder Windows 10 Preview Builds behoben werden.

+1

Es funktioniert in Windows 10 Tech Preview Build 9860. –

Verwandte Themen