title: Setting Nullable Enum to $null - Should this really cause PSInvalidCastException?
body: <p>Setting a Nullable Enum to $null in PowerShell causes a<code>System.Management.Automation.PSInvalidCastException</code> exception.  This is unexpected (to me at least). Is there a reasonable explanation for this? Here is an example that shows how setting a Nullable Int32 is successful, but setting a Nullable Enum causes an exception:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>The exception message reads: </p>
  
  <blockquote>
    <p><em>Exception setting "NullableColor": "Cannot convert null to type "ColorEnum" due to enumeration values that are not valid. Specify one
    of the following enumeration values and try again. The possible
    enumeration values are  "Red, Blue, Green"."</em></p>
  </blockquote>
  
  <p>The reason I would like to be able to use a Nullable Enum, rather than an Enum with a default value of 0, is because the Enum I want to use represents a nullable database column which is expected to be null when no valid value is set.  I cannot change the database model, so unfortunately it feels like the solution may be to use an Int32 instead of an Enum.  </p>
  
  <p>Has anyone else experienced this?  Is it a bug perhaps?</p>
  
  <p>$PsVersionTable:</p>
  
  <pre><code>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     
  </code></pre>