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