Ich wollte die neue Funktion für nullfähige Referenztypen in C # 8.0 testen .
Ich habe ein neues Projekt für .NET Core 3.0 gestartet, nullfähige Referenztypen in der .csprojDatei aktiviert und mit dem Codieren begonnen. Ich habe eine einfache Liste erstellt, die a nimmt string[]und die stringin diesem Array gleich zurückgibt abc. Da ich nicht sicher bin, ob abcdas Array tatsächlich vorhanden ist, verwende ich dies. Dies FirstOrDefault()sollte standardmäßig verwendet werden, nullwenn keine Übereinstimmung gefunden wird.
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Meine Methode zurückgibt string, das sollte jetzt die seine Nicht-Nullable - Typ. Da FirstOrDefault()möglicherweise zurückgegeben wird null, würde ich erwarten, dass die obige Methode eine Warnung ausgibt, wenn die Variable null zurückgegeben arg wird. Es tut nicht.
Wenn man sich die Signatur für FirstOrDefault()in Visual Studio ansieht, ist klar, warum : Die Methode gibt a zurück string, nicht das nullbare Äquivalent, das string?ich erwarten würde.
Wenn Sie den folgenden Methodenkörper verwenden, erhalten Sie die erwartete Warnung:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
System.LinqStellen Systembibliotheken (in diesem Beispiel ) beim Targeting von .NET Core 3.0 wirklich keine Informationen zur Nullbarkeit bereit?