2014-11-05 56 views
7

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

它看起来像一个bug。你可以在这里提交 - https://connect.microsoft.com/PowerShell/Feedback – 2014-11-05 18:24:25

+1

对我来说也是一个bug。 GJ找到它。这里是更多关于可空枚举的链接:http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null – 2014-11-05 18:31:51

回答

5

这是在PowerShell中4的错误(也可能是3,但我还没有尝试过)。

它已经在PowerShell V5中得到修复(对照最近的内部版本进行了验证),我相信它应该在9月份WMF5预览版或Windows 10预览版的公共版本中修复。

+1

它可以在Windows 10 Tech Preview build 9860中运行。 – 2014-11-05 23:03:27

相关问题