¿Por qué debería rodearme explícitamente con "sin marcar"?
Hay alguien capaz de explicarme este extraño comportamient
int i = 0x1234;
byte b1 = (byte)i;
byte b2 = (byte)0x1234; //error: const value '4660' can't convert to byte (use unchecked)
byte b3 = unchecked((byte)0x1234);
byte b4 = checked((byte)i); //throws
byte b5 = (byte)(int)0x1234; //error: same as above
NOTA: es una aplicación de consola vacía, conN comprobación aritmética habilitada (por defecto es). Gracias a todos de antemano.
EDIT: se suponía que debía ser lo suficientemente claro, pero no para todos.
Sé que una palabra no puede caber en un byte. Pero, por defecto, un programa C # permite ciertas operaciones "peligrosas", principalmente por razones de rendimiento.
e manera similar, puedo sumar dos enteros grandes juntos y no tener ningún desbordamiento.
Mi pregunta fue sobre el error de tiempo de compilación anterior: la conversión / asignación de b1 se compila, la b2 no se puede compilar. Aparentemente no hay diferencia, porque ambos son Int32 que tienen el mismo valor.
Espero que esté claro ahora.