Мне интересно, есть ли способ объявить байтовую переменную коротким способом, например, с плавающей запятой или с удвоением? Я имею в виду, как 5f
и 5d
. Конечно, я мог бы написать byte x = 5
, но это немного несущественно, если вы используете var
для локальных переменных.
c#
.net
value-type
Матиас
источник
источник
var
что это единственный вариант использования. Есть и другие допустимые варианты использования. Например,byte value = condition ? (byte)5 : (byte)6
.var value = (byte)(condition ? 5 : 6);
.byte value = condition ? ub5 : ub6;
определениемbyte ub5 = 5, ub6 = 6;
. хе - хеbyte value = condition ? 5 : 6;
?Ответы:
Там нет упоминания буквального суффикса в справочнике MSDN для байта, а также в спецификации языка C # 4.0 . Единственные литеральные суффиксы в C # предназначены для целых и действительных чисел следующим образом:
Если вы хотите использовать
var
, вы всегда можете бросить байт, как вvar y = (byte) 5
Хотя это и не связано, в C # 7 был введен новый двоичный префикс
0b
, в котором указано, что число находится в двоичном формате. Тем не менее, нет суффикса, чтобы сделать его байтом, например:источник
0b1010_1011_1100_1101_1110_1111
все ещеInt32
хотя.0b
рассматривается.https://roslyn.codeplex.com/discussions/542111
Видимо, кажется, что они сделали этот шаг в VB.NET (может быть, не выпущен прямо сейчас), и они могли бы реализовать это в roslyn для C # - иди отдать свой голос, если вы думаете, что это то, что вы хотели бы. У вас также будет возможность предложить возможный синтаксис.
источник
Из этой страницы MSDN может показаться, что ваши единственные варианты - явное приведение (
var x = (byte)5
) или прекращение использованияvar
...источник
var
. Например,this.pixels[x, y] = condition ? (byte)0 : (byte)1;
Math.Max(myByte, (byte)1)
. И кстати, вы можете заменить свой пример на:,this.pixels[x, y] = (byte)(condition ? 0 : 1);
что для меня выглядит немного лучше, илиthis.pixels[x, y] = Convert.ToByte(!condition);
[InlineData(1)]
-[InlineData(1b)]
выглядел бы намного лучше, чем[InlineData((byte)1)]
(использование только1
могло бы вызвать исключение, если параметр имеет значение nullable byte, и вы дали ему int)Согласно MSDN вы можете объявить байт, используя десятичный, шестнадцатеричный или двоичный литерал.
источник
byte x; x = predicate ? 0x05 : 0x00;
это ошибка, потому что результатом троичного оператора является int.var x = 5
, х является целым, сvar x = 5d
, х является двойным. При использовании числа в качестве параметра в атрибуте это становится важным: конструктор с double мог бы делать что-то еще, кроме конструктора с int. (Возможно, не должно, но могло бы). Своим ответом вы показываете только разные возможности для инициализацииx
.