Литеральный суффикс для байта в .NET?

Мне интересно, есть ли способ объявить байтовую переменную коротким способом, например float или double? Я имею в виду как 5f и 5d. Конечно, я мог бы написать byte x = 5, но это немного несущественно, если вы используете var для локальных переменных.

Ответ 1

Нет упоминания буквального суффикса в ссылке MSDN для байта, а также в Спецификация языка С# 4.0. Единственные буквальные суффиксы в С# для целых и действительных чисел следующие:

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

Если вы хотите использовать var, вы всегда можете указать байт, как в var y = (byte) 5

Хотя на самом деле это не связано, в С# 7 был введен новый двоичный префикс 0b, в котором указано, что число находится в двоичном формате. Тем не менее, нет суффикса, чтобы сделать его байтом, например:

var b = 0b1010_1011_1100_1101_1110_1111; //int

Ответ 2

Итак, мы добавили бинарные литералы в VB прошлой осенью и получили аналогичную обратную связь от ранних тестеров. Мы решили добавить суффикс для байта для VB. Мы (для подписанного байта) и UB (для байта без знака). Причина это не только B и SB в два раза.

Во-первых, суффикс B является двусмысленным, если вы пишете в шестнадцатеричном виде (что означает 0xFFB?) и даже если у нас есть решение для этого или другое символ "B" ( "Y" считался, F # использует это) никто не мог помните, было ли значение по умолчанию подписано или без знака -.NET байты без знака по умолчанию, поэтому было бы целесообразно выбрать B и SB, но все другие суффиксы подписаны по умолчанию, поэтому он будет согласован с другими суффиксами типа для выбора B и UB. В итоге мы пошли однозначные SB и UB. - Энтони Д. Грин,

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

Похоже, что они сделали этот шаг в VB.NET(возможно, не будут выпущены прямо сейчас), и они могут реализовать его в roslyn для С# - идите, дайте свой голос, если вы думаете, что что-то вы как. У вас также будет возможность предложить возможный синтаксис.

Ответ 4

По MSDN вы можете объявить байт, используя десятичный, шестнадцатеричный или двоичный литерал.

// decimal literal
byte x = 5;

// hex decimal literal
byte x = 0xC5;

// byte literal
byte x = 0b0000_0101;