web-dev-qa-db-fra.com

Suffixe littéral pour octet dans .NET?

Je me demande s’il existe un moyen de déclarer une variable d’octet de la même manière que float ou double? Je veux dire 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.

151
Matthias

Il n'y a aucune mention de suffixe littéral sur le référence MSDN pour Byte ainsi que dans le spécification de langage C # 4. . Les seuls suffixes littéraux en C # concernent les nombres entiers et réels, comme suit:

u = uint
l = long
ul = ulong
f = float
m = decimal
d = double

Si vous voulez utiliser var, vous pouvez toujours convertir l'octet comme dans var y = (byte) 5

Bien que cela ne soit pas vraiment lié, un nouveau préfixe binaire a été introduit en C # 7 0b, Qui indique que le nombre est au format binaire. Il n’existe toujours pas de suffixe pour en faire un octet, par exemple:

var b = 0b1010_1011_1100_1101_1110_1111; //int
134
Matt

Nous avons donc ajouté des littéraux binaires dans VB l’automne dernier) et obtenu les mêmes commentaires des premiers testeurs. Nous avons décidé d’ajouter un suffixe pour byte pour VB. Nous avons opté pour SB (pour octets signés) et UB. (pour l'octet non signé) La raison pour laquelle il n'y a pas que B et SB est double.

Premièrement, le suffixe B est ambigu si vous écrivez en hexadécimal (que signifie 0xFFB?) Et même si nous avions une solution pour cela, ou un autre caractère que 'B' ('Y' a été considéré, F # l'utilise) non on pourrait se souvenir si la valeur par défaut était signée ou non signée - les octets .NET étant non signés par défaut, il serait donc judicieux de choisir B et SB, mais tous les autres suffixes sont signés par défaut; il serait donc cohérent avec les autres suffixes de types pour choisir B et UB. En fin de compte, nous avons opté pour un SB et un UB sans ambiguïté. - Anthony D. Green,

https://roslyn.codeplex.com/discussions/542111

Apparemment, il semble qu'ils aient effectué ce mouvement dans VB.NET (il se peut que leur version ne soit pas publiée maintenant), et ils pourraient l'implémenter dans roslyn pour C # - allez donner votre vote, si vous pensez que c'est quelque chose que vous souhaitez. Vous auriez également la possibilité de proposer une syntaxe possible.

25
Erti-Chris Eelmaa

Depuis this page MSDN, il semblerait que vos seules options soient de convertir explicitement (var x = (byte)5), ou d’arrêter d’utiliser var...

10
Dan Puzey

Selon MSDN vous pouvez déclarer un octet en utilisant un littéral décimal, hexadécimal ou binaire.

// decimal literal
byte x = 5;

// hex decimal literal
byte x = 0xC5;

// binary literal
byte x = 0b0000_0101;
3
Adrian Toman