Je me demande s'il existe un moyen de déclarer une variable d'octet d'une manière courte comme des flottants ou des doubles? Je veux dire comme 5f
et 5d
. Bien sûr, je pourrais écrire byte x = 5
, mais c'est un peu sans importance si vous utilisez var
pour les variables locales.
c#
.net
value-type
Matthias
la source
la source
var
c'est le seul cas d'utilisation. Il existe d'autres cas d'utilisation valides. Par exemplebyte value = condition ? (byte)5 : (byte)6
,.var value = (byte)(condition ? 5 : 6);
.byte value = condition ? ub5 : ub6;
en définissantbyte ub5 = 5, ub6 = 6;
. hehebyte value = condition ? 5 : 6;
?Réponses:
Il n'y a aucune mention d'un suffixe littéral sur la référence MSDN pour Byte ainsi que dans la spécification du langage C # 4.0 . Les seuls suffixes littéraux en C # sont pour les nombres entiers et réels comme suit:
Si vous souhaitez utiliser
var
, vous pouvez toujours convertir l'octet comme dansvar y = (byte) 5
Bien que pas vraiment lié, en C # 7, un nouveau préfixe binaire a été introduit
0b
, qui indique que le nombre est au format binaire. Cependant, il n'y a toujours pas de suffixe pour en faire un octet, par exemple:la source
0b1010_1011_1100_1101_1110_1111
est toujours unInt32
bien.0b
est couvert.https://roslyn.codeplex.com/discussions/542111
Apparemment, il semble qu'ils ont fait ce mouvement dans VB.NET (pourrait ne pas être publié pour le moment), et ils pourraient l'implémenter dans roslyn pour C # - allez voter, si vous pensez que c'est quelque chose que vous aimeriez. Vous auriez également la possibilité de proposer une syntaxe possible.
la source
À partir de cette page MSDN, il semblerait que vos seules options soient de lancer explicitement (
var x = (byte)5
) ou d'arrêter d'utiliservar
...la source
var
. Par exemple,this.pixels[x, y] = condition ? (byte)0 : (byte)1;
Math.Max(myByte, (byte)1)
. Et BTW, vous pouvez remplacer votre exemple parthis.pixels[x, y] = (byte)(condition ? 0 : 1);
this.pixels[x, y] = Convert.ToByte(!condition);
[InlineData(1)]
-[InlineData(1b)]
aurait l'air bien mieux que[InlineData((byte)1)]
(en utilisant seulement1
pourrait lever une exception si le paramètre est nullable byte et vous lui donnez un int)Selon MSDN, vous pouvez déclarer un octet en utilisant un littéral décimal, hexadécimal ou binaire.
la source
byte x; x = predicate ? 0x05 : 0x00;
c'est une erreur car le résultat de l'opérateur ternaire est un int.var x = 5
, x est un entier, avecvar x = 5d
, x est un double. Lorsque vous utilisez le nombre comme paramètre dans un attribut, cela devient important: un constructeur avec double pourrait faire autre chose qu'un constructeur avec int. (Cela ne devrait peut-être pas, mais cela pourrait). Avec votre réponse, vous ne montrez que les différentes possibilités pour l'initialiserx
.