Saya bertanya-tanya apakah ada cara untuk mendeklarasikan variabel byte dengan cara singkat seperti mengapung atau menggandakan? Maksud saya suka 5f
dan 5d
. Tentu saya bisa menulis byte x = 5
, tapi itu agak tidak penting jika Anda gunakan var
untuk variabel lokal.
c#
.net
value-type
Matthias
sumber
sumber
var
adalah satu-satunya kasus penggunaan. Ada kasus penggunaan lain yang valid. Sebagai contohbyte value = condition ? (byte)5 : (byte)6
,.var value = (byte)(condition ? 5 : 6);
.byte value = condition ? ub5 : ub6;
mendefinisikanbyte ub5 = 5, ub6 = 6;
. hehebyte value = condition ? 5 : 6;
?Jawaban:
Tidak disebutkan akhiran literal pada referensi MSDN untuk Byte dan juga dalam Spesifikasi Bahasa C # 4.0 . Satu-satunya sufiks literal dalam C # adalah untuk bilangan bulat dan bilangan real sebagai berikut:
Jika Anda ingin menggunakan
var
, Anda selalu dapat menggunakan byte seperti divar y = (byte) 5
Meskipun tidak benar-benar terkait, dalam C # 7, awalan biner baru diperkenalkan
0b
, yang menyatakan angka tersebut dalam format biner. Namun tidak ada akhiran untuk membuatnya byte, contoh:sumber
0b1010_1011_1100_1101_1110_1111
masih merupakanInt32
olah.0b
yang dicakup.https://roslyn.codeplex.com/discussions/542111
Rupanya, tampaknya mereka telah melakukan langkah ini di VB.NET (mungkin tidak akan dirilis sekarang), dan mereka mungkin menerapkannya di roslyn untuk C # - pergi berikan suara Anda, jika Anda pikir itu sesuatu yang Anda inginkan. Anda juga memiliki kesempatan untuk mengusulkan sintaks yang mungkin.
sumber
Dari halaman MSDN ini , tampaknya satu-satunya pilihan Anda adalah menggunakan secara eksplisit (
var x = (byte)5
), atau berhenti menggunakanvar
...sumber
var
. Misalnya,this.pixels[x, y] = condition ? (byte)0 : (byte)1;
Math.Max(myByte, (byte)1)
. Dan BTW, Anda dapat mengganti contoh Anda menjadithis.pixels[x, y] = (byte)(condition ? 0 : 1);
this.pixels[x, y] = Convert.ToByte(!condition);
[InlineData(1)]
-[InlineData(1b)]
akan terlihat jauh lebih baik daripada[InlineData((byte)1)]
(hanya menggunakan1
bisa melempar pengecualian jika parameternya nullable byte dan Anda memberikannya int)Per MSDN Anda dapat mendeklarasikan byte menggunakan desimal, heksadesimal atau biner literal.
sumber
byte x; x = predicate ? 0x05 : 0x00;
merupakan kesalahan karena hasil dari operator ternary adalah int.var x = 5
, x adalah int, denganvar x = 5d
, x adalah dobel. Ketika menggunakan angka sebagai parameter dalam atribut, ini menjadi penting: konstruktor dengan ganda dapat melakukan hal lain selain konstruktor dengan int. (Mungkin seharusnya tidak, tetapi bisa). Dengan jawaban Anda, Anda hanya menunjukkan berbagai kemungkinan untuk menginisialisasi itux
.