পরিবর্তনযোগ্য বুল রূপান্তর? বুল করা


122

আপনি কীভাবে একটি শুরুর bool?দিকে রূপান্তর করবেনbool সি # ?

আমি চেষ্টা করেছি x.Valueবা x.HasValue...

উত্তর:


199

নাল বুলটি কী উপস্থাপন করবে তা আপনাকে শেষ পর্যন্ত সিদ্ধান্ত নিতে হবে। যদি nullহওয়া উচিত তবে falseআপনি এটি করতে পারেন:

bool newBool = x.HasValue ? x.Value : false;

বা:

bool newBool = x.HasValue && x.Value;

বা:

bool newBool = x ?? false;

কি সম্পর্কে VB.NETযদি আপনি না: dim newBool as Boolean = CBool(x)? হবে nullরূপান্তরিত করা falseবা ব্যতিক্রম ফেলে দেওয়া হবে?
লুক টি

এটি কি সংকলন করে?
কেন পেসপিসা

হ্যাঁ এটি করে - এটি একটি 'কুইক অ্যাকশন'-এর একটি Linqবিবৃতিতে' যেখানে 'দফার জন্য প্রস্তাব করা হয়েছিল , আমি বুঝতে পারি lifted operatorsনা কেন লিনকের ভিতরে কাজ করছে বলে মনে হচ্ছে না (সম্ভবত এটি কেবল VB.NET?) - আমি কেবল পরীক্ষা করেছি এবং এটি একটি অবৈধ কাস্ট ব্যতিক্রম ছুঁড়ে
লুক টি ও'ব্রায়ান

পছন্দ করি! :) ধন্যবাদ!
প্রাগুয়ান

বা: বুল নিউবুল = এক্স == সত্য;
নিক ওয়েস্টগেট

104

আপনি ব্যবহার করতে পারেন নাল-কোয়ালেসিং অপারেটর : x ?? something, যেখানে somethingএকটি বুলিয়ান মান যে আপনি ব্যবহার করতে চান তাহলে হয় xহয় null

উদাহরণ:

bool? myBool = null;
bool newBool = myBool ?? false;

newBool মিথ্যা হবে।


1
সুতরাং,bool? myBool = null; bool newBool = myBool ?? false;
ক্যাফগিক

86

আপনি Nullable{T} GetValueOrDefault()পদ্ধতি ব্যবহার করতে পারেন । এটি বাতিল হলে মিথ্যা ফিরে আসবে।

 bool? nullableBool = null;

 bool actualBool = nullableBool.GetValueOrDefault();

6
আমি মনে করি এটি দৃis়তা এবং সি # নুব-বন্ধুত্বের মধ্যে সেরা সংকর। এছাড়াও লক্ষ করুন যে একটি ওভারলোড রয়েছে যেখানে আপনি ডিফল্ট মান নির্দিষ্ট করতে পারেন।
ফিল

4
আমি এই পদ্ধতিটি ব্যবহার করতে পছন্দ করি কারণ এটি বিবৃতি যদি 'মার্জিত' তৈরি করতে পারে if (nullableBool.GetValueOrDefault())
ওয়ালান্টস

9

আপনি ব্যবহার করতে যাচ্ছেন এমন bool?একটি ইন ifবিবৃতি, আমি খুঁজে পাব সবচেয়ে সহজ পদ্ধিতি হল জিনিস বিরুদ্ধে পারেন তুলনা হয় trueবা false

bool? b = ...;

if (b == true) { Debug.WriteLine("true"; }
if (b == false) { Debug.WriteLine("false"; }
if (b != true) { Debug.WriteLine("false or null"; }
if (b != false) { Debug.WriteLine("true or null"; }

অবশ্যই, আপনি পাশাপাশি নাল তুলনা করতে পারেন।

bool? b = ...;

if (b == null) { Debug.WriteLine("null"; }
if (b != null) { Debug.WriteLine("true or false"; }
if (b.HasValue) { Debug.WriteLine("true or false"; }
//HasValue and != null will ALWAYS return the same value, so use whatever you like.

আপনি যদি এটিকে অ্যাপ্লিকেশনের অন্যান্য অংশে যেতে একটি বোলে রূপান্তর করতে চলেছেন তবে নুল কোলেসেস অপারেটরটি আপনি যা চান তা হ'ল।

bool? b = ...;
bool b2 = b ?? true; // null becomes true
b2 = b ?? false; // null becomes false

যদি আপনি ইতিমধ্যে শূন্যের জন্য যাচাই করে ফেলেছেন এবং আপনি কেবল মানটি চান তবে মান সম্পত্তিটি অ্যাক্সেস করুন।

bool? b = ...;
if(b == null)
    throw new ArgumentNullException();
else
    SomeFunc(b.Value);

5

নাল কোলেসিং অপারেটরটি ব্যবহার করা সবচেয়ে সহজ উপায়: ??

bool? x = ...;
if (x ?? true) { 

}

??Nullable মান সাথে উপলব্ধ করা nullable অভিব্যক্তি পরীক্ষা করে কাজ করে। যদি অযোগ্য এক্সপ্রেশনটির একটি মান থাকে তবে এর মানটি ব্যবহৃত হবে অন্যথায় এটি ডানদিকে অভিব্যক্তিটি ব্যবহার করবে??



2

পুরো উপায়টি হ'ল:

bool b1;
bool? b2 = ???;
if (b2.HasValue)
   b1 = b2.Value;

অথবা আপনি নির্দিষ্ট মান ব্যবহার করে পরীক্ষা করতে পারেন

bool b3 = (b2 == true); // b2 is true, not false or null


2

এই উত্তরটি ব্যবহারের ক্ষেত্রে যখন আপনি কেবল bool?কোনও শর্তে পরীক্ষা করতে চান । এটি একটি সাধারণ পেতে ব্যবহার করা যেতে পারে bool। এটি এমন একটি বিকল্প যা আমি ব্যক্তিগতভাবে পড়তে সহজ মনে করি coalescing operator ??

আপনি যদি কোনও শর্ত পরীক্ষা করতে চান তবে আপনি এটি ব্যবহার করতে পারেন

bool? nullableBool = someFunction();
if(nullableBool == true)
{
    //Do stuff
}

উপরেরটি যদি সত্য হয় তবেই bool?সত্য হবে।

আপনি এ boolথেকে নিয়মিত বরাদ্দ করতে এটি ব্যবহার করতে পারেনbool?

bool? nullableBool = someFunction();
bool regularBool = nullableBool == true;

জাদুকরী হিসাবে একই

bool? nullableBool = someFunction();
bool regularBool = nullableBool ?? false;

0

এটি থিমটিতে একটি আকর্ষণীয় প্রকরণ। প্রথম এবং দ্বিতীয় নজরে আপনি ধরে নেবেন সত্য শাখাটি নেওয়া হয়েছে। তাই না!

bool? flag = null;
if (!flag ?? true)
{
    // false branch
}
else
{
    // true branch
}

আপনি যা চান তা পাওয়ার উপায় হ'ল:

if (!(flag ?? true))
{
    // false branch
}
else
{
    // true branch
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.