আমি শর্তাধীন লজিকাল অপারেটরগুলির উপর সি # ভাষা স্পেসিফিকেশন পড়েছি ||এবং &&এটি সংক্ষিপ্ত-সার্কিট লজিকাল অপারেটর হিসাবেও পরিচিত। আমার কাছে এটি অস্পষ্ট বলে মনে হয়েছিল যে এগুলি নুলযোগ্য বুলিয়ানগুলির জন্য বিদ্যমান ছিল, অর্থাত অপারেন্ড টাইপ Nullable<bool>(এছাড়াও লিখিত bool?), তাই আমি এটি অ-গতিশীল টাইপ করে চেষ্টা করেছি:
bool a = true;
bool? b = null;
bool? xxxx = b || a; // compile-time error, || can't be applied to these types
এটি প্রশ্নের নিষ্পত্তি বলে মনে হয়েছিল (আমি স্পেসিফিকেশনটি স্পষ্টভাবে বুঝতে পারি না, তবে ভিজ্যুয়াল সি # সংকলকটির বাস্তবায়নটি সঠিক বলে ধরেছিলাম, এখন আমি জানতাম)।
যাইহোক, আমি dynamicপাশাপাশি বাঁধাইয়ের সাথে চেষ্টা করতে চেয়েছিলাম । সুতরাং আমি পরিবর্তে এটি চেষ্টা করেছিলাম:
static class Program
{
static dynamic A
{
get
{
Console.WriteLine("'A' evaluated");
return true;
}
}
static dynamic B
{
get
{
Console.WriteLine("'B' evaluated");
return null;
}
}
static void Main()
{
dynamic x = A | B;
Console.WriteLine((object)x);
dynamic y = A & B;
Console.WriteLine((object)y);
dynamic xx = A || B;
Console.WriteLine((object)xx);
dynamic yy = A && B;
Console.WriteLine((object)yy);
}
}
অবাক করা ফলাফল এটি ব্যতিক্রম ছাড়াই চলে।
ঠিক আছে, xএবং yঅবাক হওয়ার মতো কিছু নেই, তাদের ঘোষণাগুলি উভয় সম্পত্তি পুনরুদ্ধার করতে পরিচালিত করে, এবং ফলস্বরূপ মানগুলি প্রত্যাশার মতো হয়, xহয় trueএবং yহয় null।
কিন্তু জন্য মূল্যায়ন xxএর A || Bকোন বাঁধাই-টাইম ব্যতিক্রম নেতৃত্ব, এবং শুধুমাত্র সম্পত্তি Aপড়তে হয়নি B। কেন এমন হয়? আপনি যেমন বলতে পারেন, আমরা Bপাগল বস্তুর মতো ফিরিয়ে দিতে গিটারটি পরিবর্তন করতে পারি, পছন্দ করি "Hello world"এবং xxএখনও trueআবদ্ধ-সমস্যা ছাড়াই মূল্যায়ন করব ...
মূল্যায়ন A && B(জন্য yy) এছাড়াও কোন বাধ্যবাধকতা-সময় ত্রুটি বাড়ে। এবং এখানে উভয় সম্পত্তি অবশ্যই পুনরুদ্ধার করা হয়। এটি রান-টাইম বাইন্ডার দ্বারা অনুমোদিত কেন? যদি প্রত্যাবর্তিত বস্তুটি Bএকটি "খারাপ" অবজেক্টে পরিবর্তিত হয় (যেমন একটিstring ), একটি বাধ্যতামূলক ব্যতিক্রম ঘটে।
এটা কি সঠিক আচরণ?(আপনি কীভাবে অনুমান করতে পারেন?)
আপনি চেষ্টা যদি Bপ্রথম প্রতীক হিসাবে, উভয় B || Aএবং B && A(রানটাইম দপ্তরী ব্যতিক্রম দিতে B | Aএবং B & Aসবকিছু অ শর্ট-সার্কিট অপারেটরদের সঙ্গে স্বাভাবিক কাজ জরিমানা |এবং &)।
(ভিজ্যুয়াল স্টুডিও ২০১৩ এর সি # সংকলক, এবং রানটাইম সংস্করণ। নেট ৪.২.২ দিয়ে চেষ্টা করা হয়েছে)
Nullable<Boolean>সাথে জড়িত হওয়ার কোনও দৃষ্টান্ত নেই , কেবলমাত্র বক্সযুক্ত বুলিয়ানদের হিসাবে বিবেচনা করা হয়dynamic- এর সাথে আপনার পরীক্ষাটিbool?অপ্রাসঙ্গিক। (অবশ্যই, এটি সম্পূর্ণ উত্তর নয়, কেবল একটির জীবাণু))