Me pregunto si hay alguna forma de declarar una variable de byte de forma corta como flotantes o dobles. Me refiero a me gusta 5fy 5d. Claro que podría escribir byte x = 5, pero eso es un poco intrascendente si lo usas varpara variables locales.
c#
.net
value-type
Matías
fuente
fuente

vares 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) 5Aunque 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_1111sigue siendo unInt32pensamiento0bestá 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 solo1podrí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.