C # 8.0 yeni nullable başvuru türleri özelliğini sınamak istedim .
.NET Core 3.0'ı hedefleyen yeni bir proje başlattım, .csprojdosyada nullable başvuru türlerini etkinleştirdim ve kodlamaya başladım. Ben alır string[]ve stringo dizi eşittir basit bir liste oluşturdu abc. Şimdi, abcaslında dizide var olduğundan emin değilim FirstOrDefault(), nullbir eşleşme bulunmazsa varsayılan olması gereken kullanın .
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Yöntemim string, şimdi null edilemeyen tür olması gereken döndürüyor . Geri döndüğünden beri , belki null değişkeni döndürürken yukarıdaki yöntemin bir uyarı vermesini beklerdim . O değil.FirstOrDefault()null arg
FirstOrDefault()Visual Studio'da imza bakarak, neden açıktır : Yöntem beklediğim stringboş değer eşdeğeri değil, a döndürür string?.
Aşağıdaki yöntem gövdesinin kullanılması beklediğim uyarıyı verir:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
Sistem kitaplıkları (bu örnekte System.Linq), .NET Core 3.0'ı hedeflerken gerçekten güvenlik açığı bilgilerini göstermiyor mu?