Лучший способ проверить, является ли универсальный тип строкой? (С #)

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

Но это похоже на клудж. Есть ли лучший способ обработать строковый регистр?

Ответы на вопрос(5)

Ваш ответ на вопрос