C # 8'de referans türlerini açıkça boş değer olarak işaretlemelisiniz.
Varsayılan olarak, bu türler null türlerini içeremez, bu da değer türlerine benzer. Bu, başlık altında işlerin nasıl çalıştığını değiştirmese de, tip denetleyicisi bunu manuel olarak yapmanızı gerektirir.
Verilen kod C # 8 ile çalışmak için yeniden düzenlenmiştir, ancak bu yeni özellikten faydalanmamaktadır.
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;
}
İşte bu özellikten yararlanan güncellenmiş bir kod örneği (çalışmıyor, sadece bir fikir). Bizi bir sıfır denetiminden kurtardı ve bu yöntemi biraz basitleştirdi.
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;
}