2014-11-05 5 views
7

L'impostazione di Enum Nullable su $ null in PowerShell causa un'eccezione System.Management.Automation.PSInvalidCastException. Questo è inaspettato (almeno per me). C'è una spiegazione ragionevole per questo? Ecco un esempio che mostra come la fissazione di un Nullable Int32 è successo, ma l'impostazione di un Nullable Enum causa un'eccezione:

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 

Il messaggio di eccezione si legge: impostazione

eccezione "NullableColor": "Can not convertire null in tipo "ColorEnum" a causa di valori di enumerazione non validi Specificare uno dei seguenti valori di enumerazione e riprovare. I possibili valori di enumerazione sono "Rosso, Blu, Verde". "

Il motivo che mi piacerebbe essere in grado di utilizzare un Nullable Enum, piuttosto che un Enum con un valore predefinito di 0, è perché l'Enum voglio usare rappresenta una colonna del database nullable che dovrebbe essere null quando non è impostato alcun valore valido. Non riesco a cambiare il modello del database, quindi purtroppo sembra che la soluzione potrebbe essere utilizzare un Int32 anziché un Enum.

Qualcun altro ha provato questo? Forse è un bug?

$ 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

Sembra un bug per me. Puoi inviarlo qui - https://connect.microsoft.com/PowerShell/Feedback –

+1

Sembra anche un bug per me. GJ nel trovarlo. Ecco un collegamento con ulteriori enumerazioni nullable: http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null –

risposta

5

Questo era un bug in PowerShell 4 (e probabilmente 3, ma non l'ho provato).

È stato corretto in PowerShell V5 (verificato rispetto alle build interne recenti), credo che dovrebbe essere corretto nelle versioni pubbliche come l'anteprima di WMF5 di settembre o le build di anteprima di Windows 10.

+1

Funziona in Windows 10 Tech Preview build 9860. –

Problemi correlati