নিম্নলিখিত জেনেরিক পদ্ধতি নিন:
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
।