J'ai une classe générique qui devrait autoriser n'importe quel type, primitif ou autre. Le seul problème avec cela est d'utiliser default(T)
. Lorsque vous appelez default sur un type valeur ou une chaîne, il l'initialise à une valeur raisonnable (telle qu'une chaîne vide). Lorsque vous appelez default(T)
un objet, il renvoie null. Pour diverses raisons, nous devons nous assurer que s'il ne s'agit pas d'un type primitif, nous aurons une instance par défaut du type, non null. Voici la tentative 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Problème - la chaîne n'est pas un type valeur, mais elle n'a pas de constructeur sans paramètre. Donc, la solution actuelle est:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Mais cela ressemble à un kludge. Existe-t-il une meilleure façon de gérer la casse des chaînes?