Wie behandelt man keine Übereinstimmungen in Listing.First in c #?

7

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] (IEnumerable 1 source, Func 2   Prädikat)

    
omega 04.07.2013, 14:32
quelle

6 Antworten

14

Ok, wenn es außergewöhnlich ist, dass es keinen ersten gibt,

%Vor%

Wenn Sie erwarten, dass es in einigen gültigen Situationen keine erste gibt,

%Vor%     
Jodrell 04.07.2013, 15:31
quelle
7

Während Sie eine null Prüfung auf die Suche durchführen, sind Sie nicht in Ihrem Prädikat. Die Zeile

%Vor%

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.

%Vor%     
Simon Belanger 04.07.2013 14:54
quelle
3

Ersetzen Sie zuerst FirstOrDefault :

%Vor%     
Larry 04.07.2013 15:00
quelle
2

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.

    
Golo Roden 04.07.2013 14:34
quelle
0

Überprüfen Sie, ob das Ergebnis null :

ist %Vor%

Es gibt ein anschauliches Beispiel, das zeigt, was zu tun ist, wenn das Element hier

    
Darren Davies 04.07.2013 14:34
quelle
0

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%     
Ian 04.07.2013 14:35
quelle

Tags und Links