İlkel olsun olmasın her türe izin vermesi gereken genel bir sınıfım var. Bununla ilgili tek sorun kullanmaktır default(T). Bir değer türü veya dizede varsayılanı çağırdığınızda, onu makul bir değerle başlatır (boş dize gibi). Bir default(T)nesneyi çağırdığınızda null döndürür. Çeşitli nedenlerden dolayı, ilkel bir tür değilse, o zaman null değil , türün varsayılan bir örneğine sahip olacağımızdan emin olmalıyız . İşte 1. girişim:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Problem - dizge bir değer türü değildir, ancak parametresiz bir kurucusu yoktur. Dolayısıyla mevcut çözüm şudur:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Ama bu bir kludge gibi geliyor. İpli davayı halletmenin daha güzel bir yolu var mı?