Tenho uma classe genérica que deve permitir qualquer tipo, primitivo ou não. O único problema com isso é usar default(T)
. Quando você chama default em um tipo de valor ou string, ele o inicializa com um valor razoável (como string vazia). Quando você chama default(T)
um objeto, ele retorna nulo. Por vários motivos, precisamos garantir que, se não for um tipo primitivo, teremos uma instância padrão do tipo, não nula. Aqui está a tentativa 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Problema - string não é um tipo de valor, mas não tem um construtor sem parâmetros. Portanto, a solução atual é:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Mas isso parece um desastre. Existe uma maneira mais agradável de lidar com o caso da string?