সি # 8 এ একটি স্পষ্টরূপে রেফারেন্সের ধরণগুলি শোধনযোগ্য হিসাবে চিহ্নিত করতে হবে।
ডিফল্টরূপে, এই ধরণের মানগুলি প্রকারের মতো নাল, কিন্ডা রাখতে সক্ষম হয় না। জিনিসগুলি কীভাবে হুডের নীচে কাজ করে তা পরিবর্তিত হয় না, তবে টাইপ পরীক্ষক আপনাকে ম্যানুয়ালি এটি করতে হবে।
প্রদত্ত কোডটি সি # 8 এর সাথে কাজ করার জন্য রিফ্যাক্টর হয়েছে তবে এটি নতুন বৈশিষ্ট্যটির দ্বারা কোনও উপকার করে না।
public static Delegate? Combine(params Delegate?[]? delegates)
{
// ...[]? delegates - is not null-safe, so check for null and emptiness
if (delegates == null || delegates.Length == 0)
return null;
// Delegate? d - is not null-safe too
Delegate? d = delegates[0];
for (int i = 1; i < delegates.Length; i++)
d = Combine(d, delegates[i]);
return d;
}
এই বৈশিষ্ট্যটি কাজে লাগানো একটি আপডেট কোডের (কাজ করছে না, কেবল একটি ধারণা) উদাহরণ is এটি আমাদের নাল চেক থেকে রক্ষা করেছে এবং এই পদ্ধতিটি কিছুটা সহজ করেছে।
public static Delegate? Combine(params Delegate[] delegates)
{
// `...[] delegates` - is null-safe, so just check if array is empty
if (delegates.Length == 0) return null;
// `d` - is null-safe too, since we know for sure `delegates` is both not null and not empty
Delegate d = delegates[0];
for (int i = 1; i < delegates.Length; i++)
// then here is a problem if `Combine` returns nullable
// probably, we can add some null-checks here OR mark `d` as nullable
d = Combine(d, delegates[i]);
return d;
}