.NET'te bayt için değişmez sonek?


162

Bayt değişkenini şamandıralar veya çiftler gibi kısa bir şekilde bildirmenin herhangi bir yolu olup olmadığını merak ediyorum? Ben gibi demek 5fve 5d. Tabii yazabilirim byte x = 5, ancak varyerel değişkenler için kullanıyorsanız bu biraz önemsizdir .


20
Buradaki çoğu insan vartek kullanımlık durum olduğunu düşünüyor. Başka geçerli kullanım durumları vardır. Örneğin byte value = condition ? (byte)5 : (byte)6,.
Hameer Abbasi

@HameerAbbasi senin durumunda ben giderdim var value = (byte)(condition ? 5 : 6);.
Shimmy Weitzhandler

Belki biraz çılgınca, ama byte value = condition ? ub5 : ub6;tanımlayarak devam edebilirsiniz byte ub5 = 5, ub6 = 6;. hehe
intrepidis

@HameerAbbasi Neden sadece yapmıyorsun byte value = condition ? 5 : 6;?
NetMage

@NetMage Bu, sorunun gönderildiği sırada işe yaramadı.
Hameer Abbasi

Yanıtlar:


147

Byte için MSDN başvurusunda ve C # 4.0 Dil Belirtimi'nde gerçek bir sonek belirtilmez . C # 'daki tek gerçek son ekler aşağıdaki gibi tamsayı ve gerçek sayılar içindir:

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

Kullanmak isterseniz var, baytı her zaman olduğu gibi atabilirsinizvar y = (byte) 5

Gerçekten ilişkili olmasa da, C # 7'de, 0bsayının ikili biçimde olduğunu belirten yeni bir ikili önek eklendi . Yine de bayt yapmak için bir sonek yok, örnek:

var b = 0b1010_1011_1100_1101_1110_1111; //int

22
0b1010_1011_1100_1101_1110_1111hala bir Int32gerçektir.
BanksySan

1
0bKapsanan C # 7 belgesine bir bağlantı sağlayabilir misiniz?
Kullanıcı3613932

29

Bu yüzden geçen sonbaharda VB'ye ikili değişmez değerler ekledik ve erken testçilerden benzer geri bildirimler aldık. VB için bayt için bir sonek eklemeye karar verdik. SB (imzalı byte için) ve UB (imzasız byte için) üzerine anlaştık. Sadece B ve SB olmasının nedeni iki yönlüdür.

Birincisi, onaltılık yazıyorsanız (0xFFB anlamı ne?) B soneki belirsizdir ve bunun için bir çözümümüz olsa veya 'B' den başka bir karakterimiz olsa bile ('Y' kabul edildi, F # bunu kullanır) hayır biri varsayılan imzalanmış veya imzalanmamış olup olmadığını hatırlayabilir - B ve SB'yi seçmek mantıklı olacaktır. UB. Sonunda açık SB ve UB için gittik. - Anthony D. Green,

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

Görünüşe göre, bu hareketi VB.NET'te gerçekleştirdiler (şu anda yayınlanmayabilir) ve C # için roslyn'de uygulayabilirler - eğer istediğiniz bir şey olduğunu düşünüyorsanız, oyunuzu verin. Ayrıca olası bir sözdizimi önerme şansınız da olacaktır.


1
Sonek hala MSDN sayfasında listelenmiyor (20 Temmuz 2015'de güncellendi).
mbomb007

4
Ve hala VS 2017'de uygulanmıyor gibi görünüyor.
Photon

2
Yukarıda belirtilen MSDN sayfasına göre (güncellenmiş 01/30/2018): Boole, Bayt, Karakter, Tarih, Nesne, SByte, Kısa, UInteger, ULong veya UShort veri türleri için tanımlayıcı tip karakteri yok veya diziler veya yapılar gibi herhangi bir bileşik veri türü için.
Pona

10

Gönderen bu MSDN sayfasında senin tek seçenek açıkça (döküm için vardır gibi görünüyor var x = (byte)5) veya kullanmayı bırakın var...


9
Sadece ilgili değil var. Örneğin,this.pixels[x, y] = condition ? (byte)0 : (byte)1;
John Gietzen

@JohnGietzen, kesinlikle! Benim durumumda Math.Max(myByte, (byte)1). Ve BTW, örneğinizi şu şekilde değiştirebilirsiniz: this.pixels[x, y] = (byte)(condition ? 0 : 1);bana biraz daha hoş görünüyor, ya dathis.pixels[x, y] = Convert.ToByte(!condition);
Shimmy Weitzhandler

Özelliklerde kullanmaya ne dersiniz? örneğin xunit: [InlineData(1)]- ( parametre nulllable byte ise ve bunu bir int verirseniz sadece bir istisna fırlatabilir) [InlineData(1b)]daha iyi görünebilir )[InlineData((byte)1)]1
Matthias Burger

3

Gereğince MSDN bir ondalık, onaltılık veya ikili literal kullanarak bir bayt bildirebilirsiniz.

// decimal literal
byte x = 5;

// hex decimal literal
byte x = 0xC5;

// binary literal
byte x = 0b0000_0101;

7
Evet, ancak byte x; x = predicate ? 0x05 : 0x00;bir hata çünkü üçlü işleç sonucu int.
Photon

1
@ThePhoton Hakkınız! Buna söyleyebileceğim tek şey: WAT! destroyallsoftware.com/talks/wat
Adrian Toman

3
Bu soruya cevap vermiyor. Soru, bir baytı nasıl başlatabileceğimle ilgili değil, "açıkça bir bayt" diyebilirim. ile var x = 5, x bir int, ile var x = 5d, x bir çifttir. Bir öznitelikte sayıyı parametre olarak kullanırken bu önemli hale gelir: çiftli bir kurucu, int içeren bir kurucudan başka bir şey yapabilir. (Olmamalıdır, ama olabilir). Cevabınızla, sadece bunu başlatmak için farklı olasılıkları gösterirsiniz x.
Matthias Burger

@ ThePhoton VB.net yapalım bunu. Dim x As Byte x = If (yüklem, & H05 ve H00)
Brain2000
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.