Ho una classe generica che dovrebbe consentire qualsiasi tipo, primitivo o meno. L'unico problema con questo sta usando default(T)
. Quando chiami default su un tipo di valore o una stringa, lo inizializza su un valore ragionevole (come una stringa vuota). Quando si chiama default(T)
un oggetto, restituisce null. Per vari motivi dobbiamo assicurarci che se non è un tipo primitivo, avremo un'istanza predefinita del tipo, non null. Ecco il tentativo 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Problema: la stringa non è un tipo di valore, ma non ha un costruttore senza parametri. Quindi, la soluzione attuale è:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Ma questo sembra un fiasco. C'è un modo migliore per gestire il caso delle stringhe?