2010-04-21 13 views
21

Olası Çoğalt:
Default value of a type.NET'te, çalışma zamanında: Type nesnesinden bir türün varsayılan değeri nasıl alınır?

C#

, bir Tip varsayılan değerini almak, i ...

var DefaultValue = default(bool);` 

yazabilir Ama, nasıl olsun Sağlanan Tip değişken için aynı varsayılan değer?

public object GetDefaultValue(Type ObjectType) 
{ 
    return Type.GetDefaultValue(); // This is what I need 
} 

Veya başka bir deyişle, "varsayılan" anahtar kelimenin uygulanması nedir?

+0

Bu hemen hemen kopyası ["Bir türün varsayılan değeri"] 'nin açıklaması (http://stackoverflow.com/questions/2490244/default-value-of-a-type). Codeka size yardımcı olacağını düşündüğü iyi bir [cevap] (http://stackoverflow.com/questions/2490244/default-value-of-a-type/2490274#2490274) verir. –

+0

döndürme varsayılanı (ObjectType) çalışmıyor mu? –

cevap

35

Ben Frederik fonksiyonu aslında bu gibi görünmelidir düşünüyorum:

public object GetDefaultValue(Type t) 
{ 
    if (t.IsValueType) 
    { 
     return Activator.CreateInstance(t); 
    } 
    else 
    { 
     return null; 
    } 
} 
+0

budur! Yapı, enum, değer ve referans türleri ile test ettim ve oldukça iyi çalışıyor. teşekkürler! –

13

Muhtemelen de Nullable<T> durumda dışlamak gereken birkaç CPU döngülerini azaltmak için:

public object GetDefaultValue(Type t) { 
    if (t.IsValueType && Nullable.GetUnderlyingType(t) == null) { 
     return Activator.CreateInstance(t); 
    } else { 
     return null; 
    } 
} 
+1

Nullables için NULL olmayan türlerin maliyetine göre optimizasyon yapıyorsunuz. – 0xF

İlgili konular