It seems that I have encountered a scenario where many aspects of C# 2.0+ come into play.  I needed to handle conversion from an IDataReader.GetValue() result to a generic type, including Nullable<>.  It took me a while to figure it out and with a little help from this snippet, I was quite please with the result.  So, I decided to share.

   1: private static T NullValue<T>( object testValue, T nullValue )
   2: {
   3:     T returnValue;
   4:     if( testValue is DBNull )
   5:     {
   6:         returnValue = nullValue;
   7:     }
   8:     else if( typeof(T).GetGenericTypeDefinition().Equals( typeof(Nullable<>) ) )
   9:     {
  10:         returnValue = (T)Convert.ChangeType( testValue, Nullable.GetUnderlyingType( typeof(T) ) );
  11:     }
  12:     else
  13:     {
  14:         returnValue = (T)Convert.ChangeType( testValue, typeof(T) );
  15:     }
  16:     return returnValue;
  17: }

It turns out that System.Decimal cannot be converted directly to Nullable<Int32>.  However, it can be converted to Int32, which can be converted to Nullable<Int32>.  I guess the transitive property doesn't apply to type conversion.

posted on Tuesday, March 04, 2008 11:26 PM
Filed Under [ .Net Database Productivity C# ]

Comments

No comments posted yet.

Post A Comment
Title:
Name:
Email:
Website:
Comment:
Verification: