2012-03-19 3 views
5

可能性の重複:
How can I fix this up to do generic conversion to Nullable<T>?nullable型との変換をサポートする汎用変換メソッドの記述方法は?

public static class ObjectExtensions 
    { 
     public static T To<T>(this object value) 
     { 
      return (T)Convert.ChangeType(value, typeof(T)); 
     } 
    } 

マイ上記の拡張メソッドは、別の型に種類を変換することができますが、それはNULL可能なタイプをサポートしていません。例えば

、{0}は正常に動作しますが、{1}が動作しない:NULL可能タイプにから変換サポートする汎用的な変換メソッドを作成する方法、そのため

{0}: 
var var1 = "12"; 
var var1Int = var1.To<int>(); 

{1}: 
var var2 = "12"; 
var var2IntNullable = var2.To<int?>(); 

おかげで、

+0

あなたが '' NULL可能を試みたことがありますか? –

+0

@MrLister、ジェネリックメソッド内で型を指定することはできません。 –

答えて

11

は、これが私の作品:

public static T To<T>(this object value) 
{ 
    Type t = typeof(T); 

    // Get the type that was made nullable. 
    Type valueType = Nullable.GetUnderlyingType(typeof(T)); 

    if (valueType != null) 
    { 
     // Nullable type. 

     if (value == null) 
     { 
      // you may want to do something different here. 
      return default(T); 
     } 
     else 
     { 
      // Convert to the value type. 
      object result = Convert.ChangeType(value, valueType); 

      // Cast the value type to the nullable type. 
      return (T)result; 
     } 
    } 
    else 
    { 
     // Not nullable. 
     return (T)Convert.ChangeType(value, typeof(T)); 
    } 
} 
+0

良い、ta。ただ一つのポイント。それはヌル可能な値の型だけではありません。日付時刻? (DateTimeは自分が知っている限り参照型であるため、コードコメントを修正する必要があります) –

+0

- DateTimeは構造体なので値型です。 .NETのクラスのみ参照型です – RobSiklos

+0

あなたは正しいです!既にチェックされているはずです! –

関連する問題