2014-11-05 2 views
7

PowerShell에서 Nullable Enum을 $ null로 설정하면 System.Management.Automation.PSInvalidCastException 예외가 발생합니다. 이것은 예상치 못한 일입니다 (적어도 저에게). 이것에 대한 합리적인 설명이 있습니까?

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 허용 INT32이 성공적으로 설정하지만, null 허용 열거를 설정하는 방법을 보여주는 예는 예외 원인이다 "할 수 없습니다 유효하지 않은 열거 형 값으로 인해 null을 "ColorEnum"유형으로 변환하십시오. 다음 열거 형 값 중 하나를 으로 지정하고 다시 시도하십시오. 열거 형 값은 "빨간색, 파란색, 녹색"입니다. 내가 사용하려는 열거 될 것으로 예상되는 널 (NULL) 데이터베이스 열을 나타 내기 때문에

I 0의 기본 값을 열거하기보다는, null 허용 열거 사용할 수 있도록하려는 이유는있다 유효한 값이 설정되어 있지 않은 경우는 null 필자는 데이터베이스 모델을 변경할 수 없으므로 불행히도 솔루션이 Enum 대신 Int32를 사용하는 것처럼 느껴집니다.

누구든지이 경험이 있습니까? 아마도 버그일까요?

$ 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

그것은 나에게 버그처럼 보입니다. 여기에 제출할 수 있습니다 - https://connect.microsoft.com/PowerShell/Feedback –

+1

저도 버그처럼 보입니다. GJ가 그것을 발견했다. 다음은 nullable enum에 대한 링크입니다. http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null –

답변

5

이 PowerShell을 4의 버그했다 (아마 3,하지만 난 그것을 시도하지 않은).

PowerShell V5 (최근의 내부 빌드에 대해 확인 됨)에서 수정되었으므로 9 월 WMF5 미리보기 또는 Windows 10 미리보기 빌드와 같은 공용 빌드에서 수정해야한다고 생각합니다.

+1

Windows 10 Tech Preview 빌드 9860에서 작동합니다. –

관련 문제