Aşağıdaki genel yöntemi kullanın:
public static T Get<T>(T value)
{
return value;
}
Bunu şöyle çağırırsak Get<string>(s)
, dönüş null edilemez ve eğer yaparsak Get<string?>(s)
, null edilebilir.
Eğer gibi genel bir argüman ile aradığınız Ancak eğer Get<T>(x)
ve T
örneğin çözülmezse aşağıda gibi jenerik sınıfına genel argümandır ...
class MyClass<T>
{
void Method(T x)
{
var result = Get<T>(x);
// is result nullable or non-nullable? It depends on T
}
}
Burada derleyici null veya nullable tipiyle çağrılıp çağrılmayacağını bilmiyor.
T
Boş olmayan sinyaller için kullanabileceğimiz yeni bir tür kısıtlaması vardır :
public static T Get<T>(T value) where T: notnull
{
return value;
}
Bununla birlikte, T
kısıtsız ve hala açık olan yerlerde, nullabilite bilinmemektedir.
Bu bilinmeyenler boş değerli olarak değerlendirildiyse, aşağıdaki kodu yazabilirsiniz:
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
Null değerinin olmadığı durumlarda bir uyarı almalıyız. Bilinmeyen nullabilite türlerinde, kayıt silme işlemi sırasında uyarılar ve potansiyel olarak atama uyarıları istiyoruz null
.