Eu estou querendo saber se existe alguma maneira de declarar uma variável de bytes em um curto caminho como flutuadores ou duplos? Quero dizer como 5f
e 5d
. Claro que eu poderia escrever byte x = 5
, mas isso é um pouco inconseqüente se você usar var
para variáveis locais.
c#
.net
value-type
Matthias
fonte
fonte
var
é o único caso de uso. Existem outros casos de uso válidos. Por exemplobyte value = condition ? (byte)5 : (byte)6
,.var value = (byte)(condition ? 5 : 6);
.byte value = condition ? ub5 : ub6;
definiçãobyte ub5 = 5, ub6 = 6;
. hehebyte value = condition ? 5 : 6;
?Respostas:
Não há menção de um sufixo literal na referência do MSDN para Byte , bem como na Especificação de Idioma do C # 4.0 . Os únicos sufixos literais em C # são para números inteiros e reais da seguinte maneira:
Se você deseja usar
var
, sempre pode converter o byte como emvar y = (byte) 5
Embora não esteja realmente relacionado, no C # 7, um novo prefixo binário foi introduzido
0b
, informando que o número está no formato binário. Ainda não há sufixo para torná-lo um byte, por exemplo:fonte
0b1010_1011_1100_1101_1110_1111
ainda é umInt32
pensamento.0b
é abordado.https://roslyn.codeplex.com/discussions/542111
Aparentemente, parece que eles fizeram essa ação no VB.NET (talvez não seja lançada no momento) e podem implementá-la em roslyn para C # - dê seu voto, se você acha que é algo que você gostaria. Você também teria a chance de propor uma possível sintaxe.
fonte
A partir desta página MSDN, parece que suas únicas opções são para elenco explicitamente (
var x = (byte)5
), ou parar de usarvar
...fonte
var
. Por exemplo,this.pixels[x, y] = condition ? (byte)0 : (byte)1;
Math.Max(myByte, (byte)1)
. E, BTW, você pode substituir o seu exemplo porthis.pixels[x, y] = (byte)(condition ? 0 : 1);
this.pixels[x, y] = Convert.ToByte(!condition);
[InlineData(1)]
-[InlineData(1b)]
ficaria muito melhor do que[InlineData((byte)1)]
(usando apenas1
poderia lançar uma exceção se o parâmetro for byte nulo e você dar-lhe um int)Conforme o MSDN, você pode declarar um byte usando um literal decimal, hexadecimal ou binário.
fonte
byte x; x = predicate ? 0x05 : 0x00;
é um erro porque o resultado do operador ternário é um int.var x = 5
, x é um int, comvar x = 5d
, x é um duplo. Ao usar o número como parâmetro em um atributo, isso se torna importante: um construtor com double pode fazer algo além de um construtor com int. (Pode não, mas poderia). Com sua resposta, você mostra apenas as diferentes possibilidades para inicializar issox
.