Warum ist dieser code wirft eine InvalidOperationException?
Ich denke, dass mein code sollte die ViewBag.test
Eigenschaft gleich "No Match"
, aber stattdessen wirft es ein InvalidOperationException
.
Warum ist das so?
string str = "Hello1,Hello,Hello2";
string another = "Hello5";
string retVal = str.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.First(p => p.Equals(another));
if (str == another)
{
ViewBag.test = "Match";
}
else
{
ViewBag.test = "No Match"; //this does not happen when it should
}
Gibt der code System.InvalidOperationException statt der Anzeige "No Match" auf der Seite.
Es nicht Rückgabe
.First () - wirft es, wenn es nicht eine übereinstimmung, versuchen Sie FirstOrDefault() und check null
Es nicht Rückgabe
InvalidOperationException
, wirft er es. Vor allem, weil es keine Zeichenfolge in der Liste, ist das gleich "Hello5". Was sind Sie tring zu erreichen?.First () - wirft es, wenn es nicht eine übereinstimmung, versuchen Sie FirstOrDefault() und check null
InformationsquelleAutor user2398766 | 2013-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie sehen können hier, die
First
Methode wirft eineInvalidOperationException
wenn die Sequenz auf dem es aufgerufen wird, ist leer. Da kein element das Ergebnis von split gleichHello5
, ist das Ergebnis eine leere Liste. MitFirst
auf diese Liste werfen der Ausnahme.Erwägen Sie die Verwendung
FirstOrDefault
statt (dokumentiert hier), die, statt eine Ausnahme zu werfen, wenn die Sequenz leer ist, wird der default-Wert für den Typ der enumerable. In diesem Fall, das Ergebnis der Ausschreibung wirdnull
, und Sie sollten prüfen, dass der rest des Codes.Könnte es sauberer sein, die noch zu verwenden
Any
Linq-Methode (dokumentiert hier), das gibt einenbool
.Und nun die obligatorischen one-liner über die ternärer operator:
Beachten Sie, dass ich auch
==
hier strings vergleichen, das ist mehr als Redewendungen in C#.Ich interpretierte die Frage so, dass er oder Sie versucht
ViewBag.test
"Match", wenn die variablestr
enthält die variableanother
zwischen Kommas und "Keine Übereinstimmung" sonst. Ist es das, was du meintest, @user2398766?Kann ich nur Zustimmen, aber ich kann es nicht sagen!
Ja, ich danke Ihnen so sehr.
InformationsquelleAutor Ben Reich
Geben Sie diese ein Schuss:
InformationsquelleAutor Dimitar Dimitrov