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