Tengo una clase genérica que debería permitir cualquier tipo, primitivo o no. El único problema con esto es usar default(T). Cuando llama a default en un tipo de valor o una cadena, lo inicializa a un valor razonable (como una cadena vacía). Cuando llama default(T)a un objeto, devuelve nulo. Por varias razones, necesitamos asegurarnos de que si no es un tipo primitivo, entonces tendremos una instancia predeterminada del tipo, no nula. Aquí está el intento 1:
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Problema: la cadena no es un tipo de valor, pero no tiene un constructor sin parámetros. Entonces, la solución actual es:
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
Pero esto se siente como una torpeza. ¿Existe una forma mejor de manejar el caso de cuerdas?