Me pregunto si hay alguna forma de declarar una variable de byte de forma corta como flotantes o dobles. Me refiero a me gusta 5f
y 5d
. Claro que podría escribir byte x = 5
, pero eso es un poco intrascendente si lo usas var
para variables locales.
c#
.net
value-type
Matías
fuente
fuente
var
es el único caso de uso. Hay otros casos de uso válidos. Por ejemplo,byte value = condition ? (byte)5 : (byte)6
.var value = (byte)(condition ? 5 : 6);
.byte value = condition ? ub5 : ub6;
definiendobyte ub5 = 5, ub6 = 6;
. jejebyte value = condition ? 5 : 6;
?Respuestas:
No se menciona un sufijo literal en la referencia de MSDN para Byte ni en la Especificación de lenguaje C # 4.0 . Los únicos sufijos literales en C # son números enteros y reales de la siguiente manera:
Si desea usar
var
, siempre puede emitir el byte como envar y = (byte) 5
Aunque no está realmente relacionado, en C # 7, se introdujo un nuevo prefijo binario
0b
, que establece que el número está en formato binario. Sin embargo, todavía no hay sufijo para convertirlo en un byte, por ejemplo:fuente
0b1010_1011_1100_1101_1110_1111
sigue siendo unInt32
pensamiento0b
está cubierto?https://roslyn.codeplex.com/discussions/542111
Aparentemente, parece que han hecho este movimiento en VB.NET (es posible que no se publique en este momento), y podrían implementarlo en Roslyn para C #. Ve a votar, si crees que es algo que te gustaría. También tendría la oportunidad de proponer una posible sintaxis.
fuente
Desde esta página de MSDN, parece que sus únicas opciones son emitir explícitamente (
var x = (byte)5
), o dejar de usarvar
...fuente
var
. Por ejemplo,this.pixels[x, y] = condition ? (byte)0 : (byte)1;
Math.Max(myByte, (byte)1)
. Y, por cierto, puede reemplazar su ejemplo a:,this.pixels[x, y] = (byte)(condition ? 0 : 1);
que para mí se ve un poco mejor, othis.pixels[x, y] = Convert.ToByte(!condition);
[InlineData(1)]
-[InlineData(1b)]
se vería mucho mejor que[InlineData((byte)1)]
(usar solo1
podría arrojar una excepción si el parámetro es un byte anulable y le da un int)Según MSDN , puede declarar un byte utilizando un decimal decimal, hexadecimal o literal binario.
fuente
byte x; x = predicate ? 0x05 : 0x00;
es un error porque el resultado del operador ternario es un int.var x = 5
, x es un int, convar x = 5d
, x es un doble. Cuando se usa el número como parámetro en un atributo, esto se vuelve importante: un constructor con doble podría hacer algo más que un constructor con int. (Puede que no, pero podría). Con su respuesta, solo muestra las diferentes posibilidades para inicializar esox
.