Gibt es einen kürzeren Weg, um das Folgende zu schreiben? (Etwas, das auf Null überprüft, ohne explizit != null
zu schreiben)
from item in list
where item.MyProperty != null
select item.MyProperty
Gibt es einen kürzeren Weg, um das Folgende zu schreiben? (Etwas, das auf Null überprüft, ohne explizit != null
zu schreiben)
from item in list
where item.MyProperty != null
select item.MyProperty
Wenn Sie abstimmen, geben Sie bitte an, warum. Abstimmen ohne Grund entmutigt nur Beiträge. Wenn etwas falsch oder unvollständig ist, sagen Sie es. Wenn Sie eine andere Antwort bevorzugen, stimmen Sie einfach für diese andere Antwort.
1) Ich habe nicht gevotet, aber die Beschränkung auf Verweistypen ist meiner Meinung nach keine gute Idee. Es verhindert die Verwendung dieser Methode bei nullbaren Werttypen, was besonders ärgerlich ist, wenn Sie diese Methode in einer anderen generischen Methode verwenden möchten, bei der T
nicht eingeschränkt wurde. 2) Mir gefällt auch die Namensänderung nicht besonders. Mit diesem Namen würde ich erwarten, dass überprüft wird, ob source != null
ist, und nicht, ob die Elemente nicht null sind.
Ich weiß, ich bin etwas spät dran, aber ich habe eine meiner Meinung nach sehr elegante Lösung für dieses Problem gefunden. Ich habe eine Erweiterungsmethode geschrieben, um sie an meine LINQ-Abfragen anzuhängen:
public static IEnumerable DiscardNullValues(this IEnumerable nullable)
{
foreach (var item in nullable)
{
if (item is not null) yield return item;
}
}
Funktioniert wie ein Zauber.
Dies ist ein Feature, das dem Problemverfolgungssystem von dotnet/runtime vorgeschlagen wurde.
Siehe diesen Kommentar, der eine SelectNotNull
Funktion vorschlägt: https://github.com/dotnet/runtime/issues/30381#issuecomment-806396119
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
11 Stimmen
Gibt es einen Grund, warum du nicht möchtest, dass der Code explizit darüber ist, was er tut?
0 Stimmen
Ich kenne keinen kürzeren Weg. Aber auch Ihre Version gilt allgemein als "lang".
0 Stimmen
Das ist ziemlich einfach. Aber wenn ein einzelnes Element in der Liste null ist, erhalten Sie eine NRE. Ihre where-Klausel muss sein item != null && item.MyProperty != null.
1 Stimmen
@R. Martinho Fernandes Für den nullable Werttyp und den neu hinzugefügten nullable Referenztyp gibt dir null-geprüft-dann-select immer noch einen nullable Typ.