У мене є загальний клас, який повинен дозволяти будь-який тип, примітивний чи інший. Єдина проблема з цим - використання default(T). Коли ви викликаєте за замовчуванням тип значення або рядок, він ініціалізує його до розумного значення (наприклад, порожнього рядка). Коли ви викликаєте default(T)об'єкт, він повертає значення null. З різних причин нам потрібно переконатися, що якщо це не примітивний тип, то ми матимемо типовий екземпляр типу, а не null. Ось спроба 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Проблема - рядок не є типом значення, але він не має безпараметричного конструктора. Отже, поточне рішення:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Але це відчуває себе як стукіт. Чи є більш приємний спосіб обробити рядок?