在PowerShell中将Nullable Enum设置为$ null会导致System.Management.Automation.PSInvalidCastException
异常。这是意料之外的(至少对我来说)。这有没有合理的解释?这里展示了如何设置为null的Int32是成功的,但设置一个可空枚举的例子导致异常:
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”,因为枚举值无效。指定一个 以下枚举值并再试一次。可能的 枚举值为“红色,蓝色,绿色”。
我想能够使用可空枚举,而不是一个枚举为0的默认值的原因,是因为枚举我想用代表预计将可为空数据库列如果没有设置有效值,则返回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
它看起来像一个bug。你可以在这里提交 - https://connect.microsoft.com/PowerShell/Feedback – 2014-11-05 18:24:25
对我来说也是一个bug。 GJ找到它。这里是更多关于可空枚举的链接:http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null – 2014-11-05 18:31:51