La meilleure façon de tester si un type générique est une chaîne de caractères? (C#)

J'ai une classe générique qui devraient permettre à tout type primitif ou autrement. Le seul problème avec ceci est à l'aide de default(T). Lorsque vous appelez par défaut sur une valeur de type ou une chaîne de caractères, il initialise une valeur raisonnable (comme une chaîne vide). Lorsque vous appelez default(T) sur un objet, elle renvoie null. Pour diverses raisons, nous devons nous assurer que, s'il n'est pas un type primitif, alors nous aurons une instance par défaut du type, pas null. Voici tentative 1:

T createDefault()
{
    if(typeof(T).IsValueType)
    {
        return default(T);
    }
    else
    {
        return Activator.CreateInstance<T>();
    }
}

Problème - chaîne n'est pas un type de valeur, mais il ne possède 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 se sent comme une bidouille. Est-il une plus belle façon de gérer la chaîne de cas?

InformationsquelleAutor Rex M | 2008-08-28