নিম্নলিখিত জেনেরিক পদ্ধতি নিন:
public static T Get<T>(T value)
{
return value;
}
যদি আমরা এটির মতো বলে থাকি Get<string>(s)তবে রিটার্নটি অযোগ্য হয়, এবং যদি আমরা Get<string?>(s)এটি করি তবে এটি আক্রান্ত।
তবে আপনি যদি জেনেরিক আর্গুমেন্টের সাথে কল করে থাকেন Get<T>(x)এবং এর Tসমাধান না করেন, উদাহরণস্বরূপ এটি নীচের মতো আপনার জেনেরিক শ্রেণির পক্ষে জেনেরিক যুক্তি ...
class MyClass<T>
{
void Method(T x)
{
var result = Get<T>(x);
// is result nullable or non-nullable? It depends on T
}
}
এখানে সংকলক জানে না যে শেষ পর্যন্ত এটি একটি nullable বা নন-অযোগ্য প্রকারের সাথে ডাকা হবে।
এমন একটি নতুন ধরণের প্রতিবন্ধকতা রয়েছে যা আমরা সিগন্যাল করতে ব্যবহার করতে Tপারি যা বাতিল হতে পারে না:
public static T Get<T>(T value) where T: notnull
{
return value;
}
যাইহোক, যেখানে নিয়ন্ত্রণহীন Tএবং এখনও খোলা আছে, এর শোধরতা অজানা।
যদি এই অজানাগুলিকে হ্রাসযোগ্য হিসাবে ধরা হয় তবে আপনি নিম্নলিখিত কোডটি লিখতে পারেন:
class MyClass<T>
{
void Method(T x)
{
var result = Get<T>(x);
// reassign result to null, cause we we could if unknown was treated as nullable
result = null;
}
}
ক্ষেত্রে যেখানে Tঅযোগ্য ছিল না, আমাদের একটি সতর্কতা পাওয়া উচিত ছিল। সুতরাং অজানা nullability ধরণের সঙ্গে, আমরা dereferences যখন সতর্কতা চান, কিন্তু সম্ভাব্য বরাদ্দ জন্য সতর্কতা null।