Volver a lo básico ...¿Cómo se pueden verificar las conversiones "seguras" entre los tipos de valores en .NET?
Para los tipos de referencia, se puede hacer esto:
SomeType someObject = firstObject as SomeType;
if (someObject == null)
{
// Handle the situation gracefully
}
else
{
// Do stuff
}
Para los tipos de valor, mi entendimiento es que tenemos las conversiones implícitas (sin pérdida de datos), las conversiones explícitas (es necesario si existe un riesgo de pérdida de datos), la clase Convert
(un "contenedor de conversión", creo) y también conversiones específicas de tipo (por ejemplo, double x = Double.Parse("2");
), pero no he encontrado nada similar al operador as
anterior.
lo tanto, mi pregunta es: ¿Qué provee el marco con algún método/operador/técnica para hacer algo en este sentido:
if (!Convert.CanConvert(someValue, someValueType))
{
// Beware! Data loss can occur
}
else
{
// No data loss here
}
Si no es así, ¿puede alguien por ahí sugerir un enfoque sólido para construir uno de esos CanConvert
método?
¡Muchas gracias!
EDITAR (1): El usuario-caso/problema es el siguiente: dado un algo aprobada por el consumidor del código (mi otro yo, pero eso es irrelevante), (1) Compruebe que algo es un número (bastante fácil) y (2) Coloque algo en el tipo numérico "más pequeño" donde encaja sin incurrir en pérdida de datos.
Algunos antecedentes: la naturaleza de lo que estoy tratando de hacer es más matemática que técnica: estoy tratando de ver si puedo adaptar tipos numéricos existentes a una especie de jerarquía algebraica de la forma Monoid = > Grupo => Anillo => Campo (o una versión simplificada del mismo). Mientras trabajaba en esto, y no muy seguro de cómo, "una cosa llevó a la otra" y tuve que lidiar con las conversiones de tipo ...
Re: tu edición - De hecho, hago algo así como parte de un algoritmo de compresión en línea. Mi método? Comience con un 'largo', compárelo con' byte.MaxValue', luego 'short.MaxValue', y luego' int.MaxValue', ¡y conéctelo al más pequeño que le quede! – Aaronaught
Estoy intentando algo muy similar a esto siguiendo la sugerencia de Rob a continuación. La misma idea: intente las conversiones siguiendo un orden predefinido (considero cualquier cosa sin signo "más pequeña" que cualquier otra firmada por razones matemáticas, incluso si esto no es cierto en memoria). Por cierto: ¿tienes alguna web/blog donde pueda verificar tu algoritmo? –