2014-11-05 20 views
7

Đặt một Nullable Enum thành $ null trong PowerShell gây ra một ngoại lệ System.Management.Automation.PSInvalidCastException. Điều này là bất ngờ (với tôi ít nhất). Có một lời giải thích hợp lý cho điều này? Dưới đây là một ví dụ cho thấy cách thiết lập một Nullable Int32 là thành công, nhưng thiết lập một Nullable Enum gây một ngoại lệ:

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 

Thông điệp ngoại lệ lần đọc:

ngoại lệ thiết lập "NullableColor": "Không thể chuyển đổi null thành kiểu "ColorEnum" do các giá trị đếm không hợp lệ, chỉ định một giá trị của các giá trị liệt kê sau và thử lại.

Lý do tôi muốn để có thể sử dụng một Nullable Enum, chứ không phải là một Enum với một giá trị mặc định là 0, là do Enum Tôi muốn sử dụng đại diện cho một cột cơ sở dữ liệu nullable mà dự kiến ​​sẽ được null khi không có giá trị hợp lệ nào được đặt. Tôi không thể thay đổi mô hình cơ sở dữ liệu, vì vậy tiếc là nó cảm thấy như giải pháp có thể được sử dụng một Int32 thay vì một Enum.

Có ai khác có kinh nghiệm này không? Nó có phải là một lỗi có lẽ?

$ 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

Dường như lỗi của tôi. Bạn có thể gửi ở đây - https://connect.microsoft.com/PowerShell/Feedback –

+1

Trông giống như một lỗi đối với tôi. GJ trong việc tìm kiếm nó. Đây là một liên kết với nhiều hơn về enums nullable: http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null –

Trả lời

5

Đây là một lỗi trong PowerShell 4 (và có lẽ 3, nhưng tôi đã không thử nó).

Nó đã được sửa trong PowerShell V5 (được xác minh dựa trên các bản dựng nội bộ gần đây), tôi tin rằng nó phải được sửa trong các bản dựng công khai như bản xem trước WMF5 tháng 9 hoặc bản xem trước Windows 10.

+1

Nó hoạt động trong Windows 10 Tech Preview xây dựng 9860. –

Các vấn đề liên quan