c# - শর্তসাপেক্ষ অভিব্যক্তিটির প্রকার নির্ধারণ করা যাবে না কারণ 'int' এবং<null> এর মধ্যে কোনও অন্তর্নিহিত রূপান্তর নেই




nullable (2)

স্পেক (§7.14) শর্তসাপেক্ষ অভিব্যক্তি b ? x : y b ? x : y , তিনটি সম্ভাবনা আছে, উভয়ই x এবং y উভয় একটি টাইপ আছে এবং কিছু ভাল শর্ত পূরণ করা হয়, x এবং y কেবল একটি টাইপ এবং কিছু ভাল শর্ত পূরণ করা হয়, বা একটি কম্পাইল-টাইম ত্রুটি ঘটে। এখানে, "কিছু ভাল শর্ত" অর্থ নির্দিষ্ট রূপান্তর সম্ভব, যা আমরা নীচের বিশদগুলিতে পেতে পারি।

এখন, আসুন আমরা স্পিকারের জার্মানের অংশে ফিরে আসি:

যদি x এবং y কেবল একটি টাইপ থাকে এবং উভয় x এবং y উভয় প্রকারের রূপান্তরযোগ্য হয় তবে সেটি শর্তাধীন অভিব্যক্তিটির ধরন।

এখানে সমস্যা যে

int? number = true ? 5 : null;

শুধুমাত্র শর্তাধীন ফলাফল এক একটি টাইপ আছে। এখানে x একটি int আক্ষরিক, এবং y হল null যা একটি টাইপ এবং null int intly রূপান্তর একটি int 1 হয় না । অতএব, "কিছু ভাল শর্ত" পূরণ করা হয় না এবং একটি কম্পাইল-টাইম ত্রুটি ঘটে।

এই চারটি উপায় আছে:

int? number = true ? (int?)5 : null;

এখানে আমরা এখনও ক্ষেত্রে যেখানে শুধুমাত্র একটি x এবং y একটি টাইপ আছে। মনে রাখবেন যে null এখনও একটি টাইপ নেই তবে কম্পাইলারটির কোন সমস্যা নেই কারণ (int?)5 এবং null উভয় int? intently রূপান্তরিত হয় int? (§6.1.4 এবং §6.1.5)।

অন্য উপায় সম্ভবতঃ

int? number = true ? 5 : (int?)null;

কিন্তু এখন আমরা কেন ঠিক আছে তা বোঝার জন্য এই স্পেসে একটি ভিন্ন ধারা পড়তে হবে:

যদি X টাইপ X এবং y এর টাইপ থাকে তবে Y টাইপ করুন

  • যদি একটি অন্তর্নিহিত রূপান্তর (§6.1) X থেকে Y থেকে থাকে তবে Y থেকে X তে হয় না, তখন Y শর্তাধীন অভিব্যক্তিটির প্রকার।

  • যদি একটি অন্তর্নিহিত রূপান্তর (§6.1) Y থেকে X তবে X থেকে Y থেকে নয়, তাহলে X শর্তাধীন অভিব্যক্তিটির ধরন।

  • অন্যথায়, কোন অভিব্যক্তি টাইপ নির্ধারণ করা যেতে পারে, এবং একটি কম্পাইল-সময় ত্রুটি ঘটে।

এখানে x int টাইপ int এবং y টাইপ int?int? থেকে কোন অন্তর্নিহিত রূপান্তর আছে int? int , কিন্তু int থেকে int একটি রূপান্তরিত রূপান্তর আছে int? তাই এক্সপ্রেশন টাইপ int?

1 : উল্লেখ্য যে শর্তাধীন অভিব্যক্তি, এখানে বিভ্রান্তির সাধারণ উত্সের ধরন নির্ধারণ করতে বাম দিকের প্রকারটি উপেক্ষা করা হয়।

কেন এই কম্পাইল না?

int? number = true ? 5 : null;

শর্তসাপেক্ষ অভিব্যক্তিটির প্রকার নির্ধারণ করা যাবে না কারণ 'int' এবং <null> এর মধ্যে কোনও অন্তর্নিহিত রূপান্তর নেই


null কোন সনাক্তকরণযোগ্য টাইপ নেই - এটিটিকে সুখী করার জন্য এটি একটি সামান্য প্রডডিংয়ের প্রয়োজন:

int? number = true ? 5 : (int?)null;






nullable