এইচএনকিউতে এই প্রশ্নটি পড়ে , আমি সি # 8 তে নুলযোগ্য রেফারেন্স প্রকারগুলি সম্পর্কে পড়তে গিয়ে কিছু পরীক্ষা-নিরীক্ষা করেছি made
আমি খুব সচেতন যে 10 এর মধ্যে 9 বার, বা আরও বেশি বার, কেউ যখন বলে "আমি একটি সংকলক বাগটি পেয়েছি!" এটি আসলে ডিজাইনের মাধ্যমে এবং তাদের নিজস্ব ভুল বোঝাবুঝি। এবং যেহেতু আমি কেবল আজই এই বৈশিষ্ট্যটি সন্ধান করতে শুরু করেছি, স্পষ্টতই আমার এটির খুব ভাল ধারণা নেই। উপায় ছাড়িয়ে এই কোডটি দেখুন:
#nullable enable
class Program
{
static void Main()
{
var s = "";
var b = s == null; // If you comment this line out, the warning on the line below disappears
var i = s.Length; // warning CS8602: Dereference of a possibly null reference
}
}
উপরের সাথে সংযুক্ত ডকুমেন্টেশন পড়ার পরে, আমি s == null
লাইনটি আমাকে একটি সতর্কতা দেওয়ার আশা করব - সর্বোপরি s
স্পষ্টভাবে অ-অযোগ্য, সুতরাং এটির সাথে তুলনা করা null
কোনও মানে হয় না।
পরিবর্তে, আমি পরের লাইনে একটি সতর্কতা পাচ্ছি , এবং সতর্কতাটি বলেছে যে s
এটি একটি নাল রেফারেন্স সম্ভব, যদিও এটি একটি মানুষের পক্ষে, এটি স্পষ্টতই তা নয়।
আরও বেশি, সতর্কতা প্রদর্শিত হয় না যদি আমরা তুলনা s
না করি null
।
আমি কিছু গুগলিং করেছি এবং আমি একটি গিটহাব ইস্যুতে আঘাত করেছি , যা পুরোপুরি অন্য কোনও বিষয় হতে পারে, তবে প্রক্রিয়াটিতে আমার কোনও অবদানকারীর সাথে কথোপকথন হয়েছিল যা এই আচরণে আরও কিছুটা অন্তর্দৃষ্টি দিয়েছিল (যেমন "নাল চেকগুলি প্রায়শই একটি দরকারী উপায় কোনও চলকের নালাগ্রতা সম্পর্কে তার পূর্বনির্ধারিতটি পুনরায় সেট করতে সংকলককে বলার " ) " । এটি এখনও আমাকে উত্তর ছাড়াই মূল প্রশ্নটি দিয়ে গেছে।
একটি নতুন গিটহাব ইস্যু তৈরি করার পরিবর্তে এবং অবিশ্বাস্যরকম ব্যস্ত প্রকল্পের অবদানকারীদের সময় গ্রহণের পরিবর্তে, আমি এটি সম্প্রদায়ের কাছে রাখছি।
আপনি দয়া করে আমাকে ব্যাখ্যা করতে পারেন যে কি হচ্ছে এবং কেন? বিশেষত, কেন s == null
লাইনে কোনও সতর্কতা তৈরি করা হয় নি , এবং CS8602
যখন এটি null
এখানে উল্লেখ করা সম্ভব বলে মনে হয় না কেন আমরা কেন করি ? লিঙ্কযুক্ত গিটহাব থ্রেডের পরামর্শ অনুসারে যদি ন্যূবিলিটি অনুমানটি বুলেট-প্রুফ না হয় তবে কীভাবে এটি ভুল হতে পারে? এর কিছু উদাহরণ কী হবে?
?
কারণ s
এটি অযোগ্য নয়। এটি নালায় পরিণত হয় না, কেবল কারণ আমরা এর সাথে তুলনা করার জন্য যথেষ্ট নির্বোধ ছিল null
।