.NET এ বাইটের জন্য আক্ষরিক প্রত্যয়?


162

আমি ভাবছি যে কোনও ছোট উপায়ে ফ্লোট বা ডাবলসের মতো বাইট ভেরিয়েবল ঘোষণার কোনও উপায় আছে কি? মানে আমার মত 5fএবং 5d। অবশ্যই আমি লিখতে পারতাম byte x = 5তবে আপনি যদি varস্থানীয় ভেরিয়েবলের জন্য ব্যবহার করেন তবে তা কিছুটা অপ্রয়োজনীয় ।


20
এখানকার বেশিরভাগ লোকের মনে হয় varএকমাত্র ব্যবহারের ক্ষেত্রে। অন্যান্য বৈধ ব্যবহারের মামলা আছে। উদাহরণস্বরূপ byte value = condition ? (byte)5 : (byte)6,।
হামির আব্বাসি

@ হামিরআব্বাসী আপনার ক্ষেত্রে আমি যাব var value = (byte)(condition ? 5 : 6);
শিমি ওয়েটজ্যান্ডলার

কিছুটা বোনার সম্ভবত, তবে আপনি byte value = condition ? ub5 : ub6;সংজ্ঞা দিয়ে যেতে পারেন byte ub5 = 5, ub6 = 6;। hehe
ইন্ট্রিপিডিস

@ হামিরআব্বাসী আপনি শুধু কেন করবেন না byte value = condition ? 5 : 6;?
নেটমেজ

প্রশ্নটি পোস্ট হওয়ার সময় @ নেটমেজ এটি কাজ করেনি।
হামির আব্বাসি

উত্তর:


147

বাইটের জন্য এমএসডিএন রেফারেন্সের পাশাপাশি সি # 4.0 ভাষা স্পেসিফিকেশনে আক্ষরিক প্রত্যয়টির কোনও উল্লেখ নেই । সি # তে কেবলমাত্র আক্ষরিক প্রত্যয়গুলি নিম্নরূপে পূর্ণসংখ্যা এবং আসল সংখ্যার জন্য:

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_1111এখনও একটি Int32যদিও।
ব্যাংকসিসন

1
আপনি 0bকভার করা আছে যেখানে সি # 7 নথি একটি লিঙ্ক প্রদান করতে পারে ?
ব্যবহারকারী 3613932

29

সুতরাং, আমরা শেষ পতনে বাইনারি আক্ষরিক যোগ করেছি এবং প্রারম্ভিক পরীক্ষকদের কাছ থেকে অনুরূপ প্রতিক্রিয়া পেয়েছি। আমরা ভিবির জন্য বাইটের জন্য একটি প্রত্যয় যুক্ত করার সিদ্ধান্ত নিয়েছিলাম। আমরা এসবিতে (স্বাক্ষরিত বাইটের জন্য) এবং ইউবিতে (স্বাক্ষরযুক্ত বাইটের জন্য) স্থির হয়েছি। এটি কেবল বি এবং এসবি দ্বিগুণ নয় reason

একটি, বি প্রত্যয়টি দ্বিধাহীন, যদি আপনি হেক্সাডেসিমাল (0xFFB এর অর্থ কী?) লিখছেন এবং তার জন্য আমাদের যদি সমাধানও রয়েছে, বা 'বি' ('ওয়াই' বিবেচনা করা হয়েছিল, এফ # এটি ব্যবহার করে) কোনটি নয় ডিফল্ট স্বাক্ষরিত বা স্বাক্ষরবিহীন ছিল কিনা তা কেউ মনে করতে পারে - .NET বাইট ডিফল্টরূপে স্বাক্ষরিত হয় তাই বি এবং এসবি বাছাই করা বোধগম্য হয় তবে অন্যান্য সমস্ত প্রত্যয় ডিফল্টরূপে স্বাক্ষরিত হয় সুতরাং এটি बी বাছাইয়ের জন্য অন্যান্য ধরণের প্রত্যয়গুলির সাথে সামঞ্জস্যপূর্ণ হবে এবং UB। শেষ পর্যন্ত আমরা দ্ব্যর্থহীন এসবি এবং ইউবির জন্য গিয়েছিলাম। - অ্যান্টনি ডি গ্রিন,

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

স্পষ্টতই, দেখে মনে হচ্ছে তারা VB.NET এ এই পদক্ষেপটি করেছে (সম্ভবত এখনই মুক্তি দেওয়া হবে না) এবং তারা এটি সি # র রসিনে প্রয়োগ করতে পারে - যদি আপনি মনে করেন যে এটি আপনার পছন্দসই কিছু। আপনার কাছে একটি সম্ভাব্য বাক্য গঠন প্রস্তাব করার সুযোগও রয়েছে।


1
প্রত্যয়টি এখনও এমএসডিএন পৃষ্ঠায় তালিকাভুক্ত নয় (জুলাই 20, 2015 আপডেট হয়েছে)।
mbomb007

4
এবং এখনও বনাম 2017. বাস্তবায়িত হবে বলে মনে হচ্ছে না
দ্য ফোটন

2
উপরের ভিএসে নয় 2019. উপরে উল্লিখিত এমএসডিএন পৃষ্ঠা অনুসারে (আপডেট করা হয়েছে 01/30/2018): বুলিয়ান, বাইট, চর, তারিখ, অবজেক্ট, এসবাইট, সংক্ষিপ্ত, ইউআইন্টেজার, ইউলং, বা ইউএসহর্ট ডেটা ধরণের জন্য কোনও সনাক্তকারী ধরণের অক্ষর বিদ্যমান নেই , বা কোনও সম্মিলিত ডেটা যেমন অ্যারে বা স্ট্রাকচারের জন্য।
পোনা

10

এই এমএসডিএন পৃষ্ঠা থেকে মনে হবে আপনার একমাত্র বিকল্পগুলি স্পষ্টতই কাস্ট করা ( 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প্যারামিটারটি বর্ধিত বাইট হলে কেবলমাত্র ব্যতিক্রম ব্যবহার করতে পারে এবং আপনি এটি একটি পূর্ববর্তী সময় প্রদান করেন)
ম্যাথিয়াস বার্গার

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;একটি ত্রুটি কারণ ত্রৈমাসিক অপারেটরের ফলাফলটি একটি অন্তর্নিহিত।
ফোটন 21

1
@ ফোটন আপনার অধিকার! আমি কেবল এটিই বলতে পারি: ওয়াট! नष्टআলসফটওয়্যার.টলকস
অ্যাড্রিয়ান তোম্যান

3
এটি প্রশ্নের উত্তর দেয় না। প্রশ্ন আমি কীভাবে বাইট শুরু করতে পারি তা নয় তবে কীভাবে আমি স্পষ্টভাবে "এটি একটি বাইট" বলতে পারি তা সম্পর্কে নয়। সহ var x = 5, এক্স একটি অন্তর্নিহিত, সহ var x = 5d, এক্স একটি ডাবল। কোনও বৈশিষ্ট্যে প্যারামিটার হিসাবে নম্বরটি ব্যবহার করার সময় এটি গুরুত্বপূর্ণ হয়ে ওঠে: ডাবল সহ একটি নির্মাণকারী ইন্ট্রিযুক্ত কনস্ট্রাক্টর ছাড়া অন্য কিছু করতে পারে। (এটি না করা উচিত, তবে এটি পারে)। আপনার উত্তর সহ, আপনি কেবল এটি সূচনা করতে বিভিন্ন সম্ভাবনা দেখান x
ম্যাথিয়াস বার্গার

@ThePhoton VB.net- এর এটি করা যাক। ডিমে এক্স হিসাবে বাইট x = যদি (পূর্বাভাস, & এইচ05, এবং এইচ 100)
Brain2000
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.