Zastanawiam się, czy istnieje sposób na zadeklarowanie zmiennej bajtowej w krótki sposób, na przykład zmiennoprzecinkowy lub podwójny? Mam na myśli jak 5f
i 5d
. Jasne, że mógłbym napisać byte x = 5
, ale to trochę nieistotne, jeśli używasz var
dla zmiennych lokalnych.
c#
.net
value-type
Matthias
źródło
źródło
var
jest to jedyny przypadek użycia. Istnieją inne ważne przypadki użycia. Na przykładbyte value = condition ? (byte)5 : (byte)6
.var value = (byte)(condition ? 5 : 6);
.byte value = condition ? ub5 : ub6;
definiującbyte ub5 = 5, ub6 = 6;
. hehebyte value = condition ? 5 : 6;
?Odpowiedzi:
Nie ma wzmianki o dosłownym sufiksie w odwołaniu MSDN dla Byte, a także w specyfikacji języka C # 4.0 . Jedyne dosłowne sufiksy w języku C # dotyczą liczb całkowitych i rzeczywistych w następujący sposób:
Jeśli chcesz użyć
var
, zawsze możesz rzutować bajt jako wvar y = (byte) 5
Chociaż nie jest to tak naprawdę powiązane, w C # 7 wprowadzono nowy prefiks binarny
0b
, który stwierdza, że liczba jest w formacie binarnym. Nadal jednak nie ma sufiksu, który mógłby uczynić go bajtem, przykład:źródło
0b1010_1011_1100_1101_1110_1111
jest jednak nadalInt32
.0b
jest omówiony.https://roslyn.codeplex.com/discussions/542111
Najwyraźniej wydaje się, że zrobili ten ruch w VB.NET (może nie zostać teraz wydany) i mogą zaimplementować go w Roslyn dla C # - idź oddać swój głos, jeśli uważasz, że to jest coś, co chcesz. Miałbyś również szansę zaproponować możliwą składnię.
źródło
Na tej stronie MSDN wydaje się, że jedynymi opcjami są jawne rzutowanie (
var x = (byte)5
) lub zaprzestanie używaniavar
...źródło
var
. Na przykładthis.pixels[x, y] = condition ? (byte)0 : (byte)1;
Math.Max(myByte, (byte)1)
. A tak przy okazji, możesz zamienić swój przykład nathis.pixels[x, y] = (byte)(condition ? 0 : 1);
this.pixels[x, y] = Convert.ToByte(!condition);
[InlineData(1)]
-[InlineData(1b)]
będzie wyglądać lepiej niż[InlineData((byte)1)]
(używając tylko1
mógł rzucić wyjątek, jeśli parametr jest pustych bajtów i nadać mu int)Zgodnie z MSDN możesz zadeklarować bajt za pomocą literału dziesiętnego, szesnastkowego lub binarnego.
źródło
byte x; x = predicate ? 0x05 : 0x00;
jest to błąd, ponieważ wynikiem operatora trójskładnikowego jest int.var x = 5
, x jest int, gdzievar x = 5d
, x jest podwójnym. Kiedy używasz liczby jako parametru w atrybucie, staje się to ważne: konstruktor z double mógłby zrobić coś innego niż konstruktor z int. (Może nie powinno, ale może). W swojej odpowiedzi pokazujesz tylko różne możliwości zainicjowania tegox
.