Мне интересно, есть ли способ объявить байтовую переменную коротким способом, например float или double? Я имею в виду как 5f
и 5d
. Конечно, я мог бы написать byte x = 5
, но это немного несущественно, если вы используете var
для локальных переменных.
Литеральный суффикс для байта в .NET?
Ответ 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 для С# - идите, дайте свой голос, если вы думаете, что что-то вы как. У вас также будет возможность предложить возможный синтаксис.
Ответ 3
Ответ 4
По MSDN вы можете объявить байт, используя десятичный, шестнадцатеричный или двоичный литерал.
// decimal literal
byte x = 5;
// hex decimal literal
byte x = 0xC5;
// byte literal
byte x = 0b0000_0101;