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