2014-11-05 20 views
7

Null bir Enum öğesini PowerShell'de $ null olarak ayarlamak bir System.Management.Automation.PSInvalidCastException istisnasına neden olur. Bu beklenmedik (en azından bana). Bunun için makul bir açıklaması var mı?

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 

istisna mesajı okur:

İstisna ayarı "NullableColor": İşte null Int32 başarılı ayarı, ancak bir null Enum ayarı nasıl gösteren bir örnek bir istisna almasına sebep olur "Can not . sebebiyle geçerli olmayan numaralandırma değerlerine "ColorEnum" yazmanız boş dönüştürmek aşağıdaki numaralandırma değerlerden birini belirtin ve tekrar deneyin. mümkün numaralandırma değerleri "Kırmızı, Mavi, Yeşil" dir." Ben kullanmak istiyorum Enum olması beklenen bir null veritabanı sütununu temsil ettiği için

Ben 0 varsayılan değerine sahip bir Enum yerine, bir null Enum kullanabilmek için istiyorum sebebi vardır geçerli bir değer ayarlanmadığında null. Veritabanı modelini değiştiremiyorum, bu yüzden ne yazık ki çözüm Enum yerine bir Int32 kullanmak olabilir.

Bunu başkası yapan oldu mu? Belki de bir böcek mi?

$ 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

Bana bir hata gibi görünüyor. Burada gönderebilirsiniz - https://connect.microsoft.com/PowerShell/Feedback –

+1

Bana da bir hata gibi görünüyor. Onu bulmakta GJ. Http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null –

cevap

5

Bu PowerShell 4'te bir hata oldu (ve muhtemelen 3, ama onu denemedim).

PowerShell V5'te (son dahili sürümlere göre doğrulanmış) giderilmiştir, Eylül WMF5 önizlemesi veya Windows 10 önizleme yapıları gibi ortak yapılarda düzeltilmesi gerektiğine inanıyorum.

+1

Windows 10 Tech Preview 9860'da çalışır. –