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?