In der Funktion IEnumerable.First wird der Fall behandelt, wenn keine Übereinstimmungen vorhanden sind ? Momentan stürzt es einfach ab ...
%Vor%Fehlermeldung:
Sequenz enthält kein passendes Element
Stacktrace: bei System.Linq.Enumerable.First [TSource] (IEnumerable1 source, Func
2 Prädikat)
Während Sie eine null
Prüfung auf die Suche durchführen, sind Sie nicht in Ihrem Prädikat. Die Zeile
Könnte eine Ausnahme werfen item
ist null
(haben Sie ein null
Element in die Sammlung eingefügt?) oder item.item
ist null
(Sind Sie sicher, dass es immer da ist?).
Sie könnten tun:
%Vor% Mehr gesprächig, aber Sie erhalten kein NullReferenceException
.
Bearbeiten Nun, Sie haben Ihre Frage geändert. Jetzt machst du First
. Die Methode First
wird eine Ausnahme auslösen, wenn nichts gefunden wird. Verwenden Sie stattdessen FirstOrDefault
, was null
für eine Klasse oder den Standardwert für eine struct
zurückgibt.
Zitat aus der MSDN-Website , mit der Sie verlinkt haben:
Das erste Element, das den vom angegebenen Prädikat definierten Bedingungen entspricht, falls es gefunden wird; andernfalls der Standardwert für den Typ T.
Dies beschreibt den Rückgabewert. Wenn also keine Übereinstimmung gefunden wird, wird der default
Wert für den Typ T
zurückgegeben, was null
für Referenztypen bedeutet, und Dinge wie 0
, false
& amp; co. für Werttypen.
Also in Ihrem Anrufcode, einfach nach diesem Standardwert suchen, und es geht Ihnen gut :-). Was Sie nicht tun können, ist nur den Wert, der zurückgegeben wird, wie dies z. könnte zu einem NullReferenceException
führen, wenn Sie einen Referenztyp verwenden.
Überprüfen Sie, ob das Ergebnis null
:
Es gibt ein anschauliches Beispiel, das zeigt, was zu tun ist, wenn das Element hier
Es sollte keine Ausnahme ausgelöst werden. Sie müssen den Fall behandeln, in dem der Standardwert (T) zurückgegeben wird. Möglicherweise erhalten Sie eine NullReferenceException, weil Sie den Fall nicht behandeln, in dem null zurückgegeben wird. Zum Beispiel:
%Vor%Wenn Sie das Gleiche für eine Struktur tun würden, würden Sie stattdessen nach der Standardeinstellung suchen. Ints wäre zum Beispiel eine 0:
%Vor%