У меня есть общий класс, который должен разрешать любой тип, примитивный или другой. Единственная проблема с этим - использование default(T)
. Когда вы вызываете default для типа значения или строки, он инициализирует его разумным значением (например, пустой строкой). Когда вы вызываете 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>();
}
}
Но это похоже на лабиринт. Есть ли лучший способ справиться со строкой?