(ভিজ্যুয়াল স্টুডিও 2017 এর নতুন ব্যতিক্রম সহায়ক সম্পর্কে তথ্যের জন্য এই উত্তরটির শেষে দেখুন)
এই কোডটি বিবেচনা করুন:
String s = null;
Console.WriteLine(s.Length);
এটি NullReferenceExceptionদ্বিতীয় লাইনে একটি নিক্ষেপ করবে এবং আপনি কেন জানতে চান N নেটটি আপনাকে বলবে না sযে ব্যতিক্রম ছোঁড়াবার সময় এটি বাতিল ছিল।
আপনি কেন সেই টুকরো তথ্যটি পান না তা বোঝার জন্য আপনার মনে রাখা উচিত যে এটি সি # উত্স নয় যা কার্যকর করে:
আইএল_0001: এলডনুল
IL_0002: stloc.0 // s
IL_0003: ldloc.0 // s
IL_0004: কলভার্ট সিস্টেম। স্ট্রিং.জেট_লেন্থ
আইএল_0009: কল করুন সিস্টেম.কনসোল.রাইটলাইন
এটি callvirtঅপকোড যা নিক্ষেপ করে NullReferenceExceptionএবং এটি এটি করে যে যখন মূল্যায়ন স্ট্যাকের প্রথম যুক্তিটি নাল রেফারেন্স হয় (এটি যা ব্যবহার করে বোঝানো হয়েছিল ldloc.0)।
.NET যদি এটি বলতে সক্ষম হয় যে এটি ছিল sনাল রেফারেন্স এটি কোনওভাবে ট্র্যাক করা উচিত যে মূল্যায়নের স্ট্যাকের প্রথম যুক্তিটি ফর্মটির উদ্ভব হয়েছিল s। sএক্ষেত্রে আমাদের পক্ষে এটি সহজেই দেখতে পাওয়া যায় যে এটি নাল ছিল তবে মানটি যদি অন্য ফাংশন কল থেকে ফেরত মূল্য এবং কোনও ভেরিয়েবলের মধ্যে সঞ্চয় না হয় তবে কী হবে? যাইহোক, এই জাতীয় তথ্যটি আপনি নেট। ভার্চুয়াল মেশিনের মতো ভার্চুয়াল মেশিনে রাখতে চান তা নয়।
এই সমস্যাটি এড়াতে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি সমস্ত পাবলিক মেথড কলগুলিতে আর্গুমেন্ট নাল চেকিং করুন (অবশ্যই যদি আপনি নাল রেফারেন্সের অনুমতি না দেন):
public void Foo(String s) {
if (s == null)
throw new ArgumentNullException("s");
Console.WriteLine(s.Length);
}
যদি নালটি পদ্ধতিতে পাস করা হয় তবে আপনি একটি ব্যতিক্রম পান যা সমস্যাটি কি তা স্পষ্টভাবে বর্ণনা করে (এটি sনাল)।
চার বছর পরে ভিজ্যুয়াল স্টুডিও 2017 এর এখন একটি নতুন ব্যতিক্রম সহায়ক রয়েছে যা NullReferenceExceptionনিক্ষিপ্ত হলে কোনটি নালার তা বলতে চেষ্টা করবে । এমনকি এটি কোনও প্রয়োজনীয় পদ্ধতির ফেরতের মান হলে এটি আপনাকে প্রয়োজনীয় তথ্য দিতে সক্ষম হয়:

মনে রাখবেন এটি কেবল একটি ডিইবিইউজি বিল্ডে কাজ করে।