Tengo el siguiente código C#:C# numérica constantes de
byte rule = 0;
...
rule = rule | 0x80;
que produce el error:
Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)
[Actualización: primera versión de la pregunta fue mal ... Me leído mal la salida del compilador ]
adición al elenco no significa soluciona el problema:
rule = rule | (byte) 0x80;
tengo que escribir como:
rule |= 0x80;
Lo cual parece raro. ¿Por qué el operador |=
es diferente al operador |
?
¿Hay alguna otra manera de decirle al compilador que trate la constante como un byte?
@ Giovanni Galbo: sí y no. El código trata de la programación de la memoria flash en un dispositivo externo y, lógicamente, representa un solo byte de memoria. Podría lanzarlo más tarde, pero esto parecía más obvio. ¡Creo que mi herencia de C se muestra demasiado!
@ Jonathon Holanda: el 'como' sintaxis es más limpio, pero por desgracia no parece funcionar ... Produce:
The as operator must be used with a reference type or nullable type ('byte' is a non-nullable value type)
Como dices, todas las entradas son int32, ¿la especificación del lenguaje (o CLR) no garantiza esta garantía? – Eloff
int es un alias de C# para Int32 y definitivamente no es lo mismo que un byte. El compilador JIT es consciente de la plataforma, por lo que no es necesario. Es más probable que el tamaño de la palabra nativa, el direccionamiento y la eficacia de las operaciones frente a varias primitivas nativas se relacionen con la forma en que asigna los datos gestionados (incluidas las "primitivas") en el sistema subyacente.Tenga en cuenta que se puede compilar el mismo código para .NET Micro y .NET CF (ARM de orientación para teléfono y PowerPC para XBox 360). Estos sistemas incluso pueden expresar sus números con endianness diferente que tiene efectos importantes en las operaciones binarias. – TheXenocide