Ich habe eine generische Klasse, die jeden Typ zulassen sollte, primitiv oder auf andere Weise. Das einzige Problem dabei ist die Verwendung default(T)
. Wenn Sie für einen Werttyp oder eine Zeichenfolge die Standardeinstellung aufrufen, wird diese auf einen angemessenen Wert (z. B. eine leere Zeichenfolge) initialisiert. Wenn Sie default(T)
ein Objekt aufrufen , wird null zurückgegeben. Aus verschiedenen Gründen müssen wir sicherstellen, dass wir eine Standardinstanz des Typs haben, die nicht null ist, wenn es sich nicht um einen primitiven Typ handelt . Hier ist Versuch 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Problem - Zeichenfolge ist kein Werttyp, hat jedoch keinen parameterlosen Konstruktor. Die aktuelle Lösung lautet also:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Aber das fühlt sich an wie ein Kludge. Gibt es eine schönere Möglichkeit, mit dem String-Fall umzugehen?