2012-03-19 12 views
5

Olası Çoğalt:
How can I fix this up to do generic conversion to Nullable<T>?Nullable türlerine ve null türlerinden dönüştürmeyi destekleyen genel bir dönüştürme yöntemi nasıl yazılır?

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

Benim yukarıda uzatma yöntemi yardımcı olur başka bir türe bir tür dönüştürme ama null türlerini desteklemez. Örneğin

, {0} çalışıyor ancak {1} çalışmaz:

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

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

Yani, nasıl ve null türleri dönüştürme destekleyecek genel bir dönüşüm yöntemi yazmaya? Bu benim için çalışıyor

sayesinde

+0

Eğer 'null ' denediniz mi? –

+0

@MrLister, genel yöntem içinde bir tür belirtebilirsiniz. –

cevap

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

iyi, ta. sadece bir nokta; sadece null edilebilen değer türleri değil, ör. DateTime? (DateTime bildiğim kadarıyla bir referans türüdür), böylece kod yorumlarınızın düzeltilmesi gerekebilir;) –

+0

no - DateTime bir yapı olduğundan bir değer türüdür. .NET – RobSiklos

+0

'da yalnızca sınıflar referans türleridir. Haklısınız! zaten kontrol etmiş olmalı! –

İlgili konular