Sequenz enthält mehr als ein Element - SingleOrDefault ist nicht hilfreich

7

Ich habe die folgende Zeile, bekomme aber immer noch eine Ausnahme " Sequenz enthält mehr als ein Element "

%Vor%

Ich hatte gehofft, dass SingleOrDefault die Ausnahme vermeiden würde.

    
StackTrace 27.03.2014, 15:06
quelle

2 Antworten

19

SingleOrDefault gibt ein SINGLE -Element oder null zurück, wenn kein Element gefunden wurde. Wenn 2 Elemente in Ihrer Enumerable gefunden werden, wird die Ausnahme ausgelöst, die Sie sehen. Genau wie Highlander ... mit Single - es kann nur einen geben.

FirstOrDefault gibt das gefundene FIRST -Element zurück oder null, wenn kein Element gefunden wird. Wenn also zwei Elemente mit Ihrem Prädikat übereinstimmen, wird der zweite ignoriert.

Angenommen, es ist Ihnen egal, ob es mehrere Übereinstimmungen gibt und Sie nur die erste oder null wollen, wenn keine Übereinstimmung gefunden wird ... dann möchten Sie wahrscheinlich Folgendes ...

%Vor%

Beachten Sie, dass diese beiden Methoden nur ein Element zurückgeben, das sich nur dadurch unterscheidet, was sie tun, nachdem sie eine Übereinstimmung gefunden haben. First beendet die Suche nach diesem Punkt und gibt das Ergebnis zurück. Single überprüft den Rest der Liste, um sicherzustellen, dass keine Übereinstimmungen mehr vorhanden sind. Der OrDefault -Teil bestimmt, was zurückgegeben wird, wenn keine Übereinstimmung gefunden wird. SingleOrDefault oder FirstOrDefault gibt null zurück, wenn kein Wert gefunden wird, aber wenn Sie nur Single oder First verwenden, dann MUSS es eine Übereinstimmung finden oder es wird eine Ausnahme ausgelöst.

BEARBEITEN: Guter Punkt Steve Da First das erste Element zurückgibt, müssen Sie möglicherweise OrderBy verwenden, um sicherzustellen, dass das gewünschte Element tatsächlich das erste Element ist. Zum Beispiel ... angenommen, Ihr Objekt hatte eine UpdateDate-Eigenschaft und Sie wollten das Objekt mit dem neuesten UpdateDate ...

%Vor%     
Kevin 27.03.2014, 15:08
quelle
0

Wenn Sie eine Liste haben, konvertieren Sie die Liste in IEnumerable Liste, dann können Sie FirstOrDefault Methode

verwenden %Vor%     
quelle

Tags und Links