【问题标题】:Setting Nullable Enum to $null - Should this really cause PSInvalidCastException?将 Nullable Enum 设置为 $null - 这真的会导致 PSInvalidCastException 吗?
【发布时间】:2015-01-02 01:02:58
【问题描述】:

在 PowerShell 中将 Nullable Enum 设置为 $null 会导致System.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 而不是默认值为 0 的 Enum 的原因是因为我要使用的 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     

【问题讨论】:

标签: .net powershell enums powershell-3.0 nullable


【解决方案1】:

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

它已在 PowerShell V5 中修复(针对最近的内部版本进行了验证),我认为它应该在公共版本中修复,例如 9 月的 WMF5 预览版或 Windows 10 预览版。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多