considerar esta clase de prueba estática:¿Por qué C# lanza errores de conversión al intentar operaciones matemáticas en tipos enteros distintos de int?
public static class Test
{
public static ushort sum(ushort value1, ushort value2)
{
return value1 + value2
}
}
Esto hace que el siguiente error de compilación, con value1 + value2
subrayada en rojo:
No se puede convertir implícitamente el tipo 'int' a 'ushort'. Existe una conversión explícita (¿falta un elenco)?
¿Por qué?
El compilador le pide que sea explícito sobre el hecho de que está haciendo una conversión de reducción, donde los datos pueden perderse. Si pasa en ushort.MaxValue y 1, ¿qué debería pasar? Esa es la pregunta que el compilador te recuerda que respondas. –
@Dan: Lo que debería ocurrir es que el 'ushort' se desborde automáticamente, o arroje una excepción de desbordamiento si se usa la palabra clave' checked'. Si agrega dos valores 'int', no obtendrá el mismo error de compilación, aunque es posible el desbordamiento. –
Mi opinión: el desbordamiento es algo que ocurre como resultado de una operación, no una asignación. En particular, puede desbordarse en medio de un cálculo complejo incluso si el resultado final estaría en el rango. Si se produce un desbordamiento, la operación matemática no ha funcionado como se esperaba, pero esto no ocurre al agregar dos ushorts en un sistema de 32 bits. Las matemáticas funcionaron bien, pero ahora debes decidir cómo interpretar el resultado. Si desea que se desborde ushort, entonces puede enviarlo a un ushort explícitamente. Esto podría suceder implícitamente, pero requerir un lanzamiento explícito es útil. –