Mam klasę ogólną, która powinna zezwalać na dowolny typ, prymitywny lub inny. Jedynym problemem jest używanie default(T). Kiedy wywołujesz default dla typu wartości lub ciągu, inicjalizuje go do rozsądnej wartości (takiej jak pusty ciąg). Kiedy wywołujesz default(T)obiekt, zwraca on null. Z różnych powodów musimy się upewnić, że jeśli nie jest to typ pierwotny, będziemy mieć domyślną instancję typu, a nie null. Oto próba 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Problem - łańcuch nie jest typem wartości, ale nie ma konstruktora bez parametrów. Tak więc obecne rozwiązanie to:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Ale to wydaje się bzdurą. Czy jest lepszy sposób na obsłużenie obudowy sznurka?