.NET में बाइट के लिए शाब्दिक प्रत्यय?


162

मैं सोच रहा हूं कि क्या फ्लोट या डबल्स जैसे छोटे तरीके से बाइट चर घोषित करने का कोई तरीका है? मेरा मतलब है 5fऔर जैसे 5d। यकीन है कि मैं लिख सकता था byte x = 5, लेकिन अगर आप varस्थानीय चर के लिए उपयोग करते हैं तो यह थोड़ा असंगत है ।


20
यहाँ ज्यादातर लोगों को लगता varहै कि केवल उपयोग का मामला है। अन्य वैध उपयोग के मामले हैं। उदाहरण के लिए, byte value = condition ? (byte)5 : (byte)6
हमीर अब्बासी

@HameerAbbasi आपके मामले में मैं जाऊंगा var value = (byte)(condition ? 5 : 6);
शिम्मी वेइटहैंडलर

थोड़ा बोनट शायद, लेकिन आप byte value = condition ? ub5 : ub6;परिभाषित करके जा सकते हैं byte ub5 = 5, ub6 = 6;। hehe
intrepidis

@HameerAbbasi आप अभी क्यों नहीं करेंगे byte value = condition ? 5 : 6;?
NetMage

@NetMage उस समय काम नहीं आया जब प्रश्न पोस्ट किया गया था।
हमीर अब्बासी

जवाबों:


147

बाइट के साथ-साथ C # 4.0 भाषा विनिर्देश में MSDN संदर्भ पर शाब्दिक प्रत्यय का कोई उल्लेख नहीं है । C # में केवल शाब्दिक प्रत्यय पूर्णांक और वास्तविक संख्याओं के लिए हैं:

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

21
0b1010_1011_1100_1101_1110_1111Int32हालांकि अभी भी है ।
बैंकेसन

1
क्या आप C # 7 दस्तावेज़ के लिए एक लिंक प्रदान कर सकते हैं जहां 0bकवर किया गया है।
user3613932

29

इसलिए, हमने वीबी अंतिम गिरावट में द्विआधारी शाब्दिक जोड़े और शुरुआती परीक्षकों से इसी तरह की प्रतिक्रिया मिली। हमने वीबी के लिए बाइट के लिए एक प्रत्यय जोड़ने का फैसला किया। हम एसबी (हस्ताक्षरित बाइट के लिए) और यूबी (अहस्ताक्षरित बाइट के लिए) पर बसे। इसका कारण सिर्फ B और SB दो-गुना नहीं है।

एक, बी प्रत्यय अस्पष्ट है यदि आप हेक्साडेसिमल में लिख रहे हैं (0xFFB का मतलब क्या है?) और यहां तक ​​कि अगर हमारे पास उसके लिए एक समाधान था, या 'बी' ('वाई') की तुलना में किसी अन्य चरित्र पर विचार किया गया था, तो एफ # इस का उपयोग करता है: नहीं कोई यह याद रख सकता है कि क्या डिफ़ॉल्ट पर हस्ताक्षर किए गए थे या अहस्ताक्षरित थे - .NET बाइट्स डिफ़ॉल्ट रूप से अहस्ताक्षरित हैं, इसलिए यह बी और एसबी को चुनने के लिए समझ में आता है, लेकिन अन्य सभी प्रत्ययों को डिफ़ॉल्ट रूप से हस्ताक्षरित किया जाता है, इसलिए यह बी को चुनने के लिए अन्य प्रकार के प्रत्ययों के अनुरूप होगा। यूबी। अंत में हम असहाय एसबी और यूबी के लिए चले गए। - एंथनी डी। ग्रीन,

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

जाहिरा तौर पर, ऐसा लगता है कि उन्होंने यह कदम VB.NET (अभी जारी नहीं किया जा सकता है) में किया है, और वे इसे C # के लिए रोजलिन में लागू कर सकते हैं - अपना वोट दें, यदि आपको लगता है कि आप ऐसा कुछ चाहते हैं। आपके पास संभावित सिंटैक्स का प्रस्ताव करने का भी मौका होगा।


1
प्रत्यय अभी भी MSDN पृष्ठ (20 जुलाई, 2015 को अद्यतन) में सूचीबद्ध नहीं है ।
mbomb007

4
और अभी भी वीएस 2017 में लागू नहीं होता है।
द फोटॉन

2
न ही प्रति MSDN पेज वी.एस. 2019 के रूप में में ऊपर उद्धृत (अद्यतन 2018/01/30): कोई पहचानकर्ता प्रकार पात्रों बूलियन, बाइट, चार, तिथि, वस्तु, SByte, लघु, UInteger, Ulong, या UShort डेटा प्रकार के लिए मौजूद हैं , या सरणियों या संरचनाओं जैसे किसी भी समग्र डेटा प्रकारों के लिए।
पोन्ना

10

से इस MSDN पेज, यह है कि अपने ही विकल्प स्पष्ट रूप से (डाली कर रहे हैं प्रतीत होता है var x = (byte)5), या का उपयोग बंद var...


9
यह सिर्फ के बारे में नहीं है 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);
शम्मी वेइटहैंडलर

कैसे विशेषताओं में उपयोग के बारे में? उदा xunit: [InlineData(1)]- [InlineData(1b)]रास्ते से बेहतर लगेगा [InlineData((byte)1)](केवल 1एक अपवाद का उपयोग कर सकता है अगर पैरामीटर अशक्त बाइट है और आप इसे एक इंट दे)
Matthias बर्गर

3

MSDN के अनुसार आप दशमलव, हेक्साडेसिमल या बाइनरी शाब्दिक का उपयोग करके एक बाइट की घोषणा कर सकते हैं।

// decimal literal
byte x = 5;

// hex decimal literal
byte x = 0xC5;

// binary literal
byte x = 0b0000_0101;

7
हां, लेकिन byte x; x = predicate ? 0x05 : 0x00;एक त्रुटि है क्योंकि टर्नरी ऑपरेटर का परिणाम एक इंट है।
फोटॉन

1
@ ThePhoton आपका अधिकार! केवल एक चीज जो मैं कह सकता हूं वह है: वाट! destroyallsoftware.com/talks/wat
एड्रियन टोमन

3
इस सवाल का जवाब नहीं है। प्रश्न यह नहीं है कि मैं एक बाइट को कैसे शुरू कर सकता हूं, लेकिन मैं कैसे स्पष्ट रूप से कह सकता हूं कि "यह एक बाइट है"। साथ var x = 5, x एक इंट है, साथ var x = 5d, x एक डबल है। एक विशेषता में एक पैरामीटर के रूप में संख्या का उपयोग करते समय यह महत्वपूर्ण हो जाता है: डबल के साथ एक कंस्ट्रक्टर इंट के साथ एक कंस्ट्रक्टर की तुलना में कुछ और कर सकता है। (यह नहीं होना चाहिए, लेकिन यह हो सकता है)। अपने उत्तर के साथ, आप केवल उसे आरंभ करने के लिए विभिन्न संभावनाएँ दिखाते हैं x
मथायस बर्गर

@ ThePhoton VB.net आइए आपको बताते हैं। डिम एक्स अस बाइट x = यदि (विधेय, और H05, और H00)
ब्रेन २००
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.