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 .csproj
Datei aktiviert und mit dem Codieren begonnen. Ich habe eine einfache Liste erstellt, die a nimmt string[]
und die string
in diesem Array gleich zurückgibt abc
. Da ich nicht sicher bin, ob abc
das Array tatsächlich vorhanden ist, verwende ich dies. Dies FirstOrDefault()
sollte standardmäßig verwendet werden, null
wenn 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.Linq
Stellen Systembibliotheken (in diesem Beispiel ) beim Targeting von .NET Core 3.0 wirklich keine Informationen zur Nullbarkeit bereit?