İ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ı?