Auf der Suche nach einer Antwort auf diese Frage bin ich auf ähnliche mit LINQ gestoßen, konnte sie jedoch nicht vollständig verstehen (und somit implementieren), da ich nicht damit vertraut bin. Was ich im Grunde möchte, ist Folgendes:
- Überprüfen Sie, ob ein Element einer Liste eine bestimmte Zeichenfolge enthält.
- Wenn ja, holen Sie sich dieses Element.
Ich weiß ehrlich gesagt nicht, wie ich das machen würde. Was ich mir einfallen lassen kann, ist Folgendes (funktioniert natürlich nicht):
if (myList.Contains(myString))
string element = myList.ElementAt(myList.IndexOf(myString));
Ich weiß, warum es nicht funktioniert:
myList.Contains()
wird nicht zurückgegebentrue
, da geprüft wird, ob ein ganzes Element der Liste mit der von mir angegebenen Zeichenfolge übereinstimmt.myList.IndexOf()
wird kein Vorkommen finden, da es, wie es wieder der Fall ist, nach einem Element sucht, das mit der Zeichenfolge übereinstimmt.
Ich habe noch keine Ahnung, wie ich dieses Problem lösen soll, aber ich denke, ich muss LINQ verwenden, wie in ähnlichen Fragen wie meinen vorgeschlagen. Wenn dies hier der Fall ist, möchte ich, dass der Antwortende mir die Verwendung von LINQ in seinem Beispiel erklärt (wie gesagt, ich habe mich in meiner Zeit mit C # nicht darum gekümmert). Vielen Dank im Voraus Jungs (und Mädels?).
EDIT: Ich habe eine Lösung gefunden; Durchlaufen Sie einfach die Liste, prüfen Sie, ob das aktuelle Element die Zeichenfolge enthält, und setzen Sie dann eine Zeichenfolge, die dem aktuellen Element entspricht. Ich frage mich jedoch, ob es einen effizienteren Weg gibt als diesen?
string myString = "bla";
string element = "";
for (int i = 0; i < myList.Count; i++)
{
if (myList[i].Contains(myString))
element = myList[i];
}
myString
. In Ihrer aktuellen Schleife erhalten Sie das letzte Element. Es hängt von Ihnen ab, ob Sie den ersten oder den letzten finden möchten. Wenn Sie nur den ersten finden möchten, brechen Sie die Schleife, nachdem Sie den Gegenstand gefunden haben.Antworten:
Sie sollten Linq hier verwenden können:
Wenn Sie einfach den ersten passenden Artikel zurückgeben möchten:
quelle
Where
mitFirstOrDefault
im zweiten FallmyList.FirstOrDefault(stringToCheck => stringToCheck.Contains(myString))
matching
Compiler bestimmt (var
)?String
Wäre esstring matching
in diesem Fall sicher , meine Liste zu verwenden , da ich weiß, dass sie vom Typ ist ?Die grundlegende Antwort lautet: Sie müssen die Schleife durchlaufen und überprüfen, ob ein Element die angegebene Zeichenfolge enthält. Nehmen wir also an, der Code lautet:
Der äquivalente, aber knappe Code lautet:
Hier ist x ein Parameter, der sich im obigen Code wie "item" verhält.
quelle
quelle
Old Fashion Loops sind fast immer die schnellsten.
quelle
Wenn Sie eine Liste von Zeichenfolgen wünschen, die Ihre Zeichenfolge enthalten:
Eine andere Option ist die Verwendung von Linq FirstOrDefault
Beachten Sie, dass
Contains
bei dieser Methode zwischen Groß- und Kleinschreibung unterschieden wird.quelle
Sie können die
FirstOrDefault
Erweiterungsmethode von Linq verwenden:Dies gibt das erste Element zurück, das den Teilstring enthält
myString
, odernull
wenn kein solches Element gefunden wird.Wenn Sie nur den Index benötigen, verwenden Sie die Methode der
List<T>
KlasseFindIndex
:Dies gibt den Index des ersten Elements zurück, das den Teilstring enthält
myString
, oder-1
wenn kein solches Element gefunden wird.quelle
Viele gute Antworten hier, aber ich benutze eine einfache mit Exists , wie unten:
quelle
Sie sollten in der Lage sein, so etwas zu verwenden, es hat für mich in Ordnung funktioniert:
oder so ähnlich, wenn Sie schauen müssen, wo es nicht passt.
quelle
Sie können verwenden
LINQ bietet Ihnen die Möglichkeit, jede Datensammlung abzufragen. Sie können die Syntax wie eine Datenbankabfrage (select, where usw.) für eine Sammlung (hier die Sammlung (Liste) von Zeichenfolgen) verwenden.
Sie tun also wie "Hol mir Gegenstände von der Liste, wo sie eine bestimmte Bedingung erfüllen".
innerhalb der Wo Sie einen "Lambda-Ausdruck" verwenden
kurz zu sagen, Lambda-Ausdruck ist so etwas wie (Eingabeparameter => Rückgabewert)
Für einen Parameter "item" wird "item.Contains (" erforderliche Zeichenfolge ")" zurückgegeben. Es gibt also true zurück, wenn das Element die Zeichenfolge enthält, und wird dadurch aus der Liste ausgewählt, da es die Bedingung erfüllt.
quelle
Um es einfach zu halten, verwenden Sie dies;
Alternativ können Sie dies auch mit der for-Schleife verwenden.
quelle
Ich habe die Bool-Option in anderen Antworten nicht gesehen, daher hoffe ich, dass der folgende Code jemandem hilft.
Benutz einfach
Any()
quelle
Es ist möglich, Any, Where, First und FirstOrDefault zu kombinieren. oder platzieren Sie das Prädikat einfach in eine dieser Methoden, je nachdem, was benötigt wird.
Sie sollten First wahrscheinlich vermeiden, es sei denn, Sie möchten eine Ausnahme auslösen, wenn keine Übereinstimmung gefunden wird. FirstOrDefault ist normalerweise die bessere Option, solange Sie wissen, dass der Standardwert des Typs zurückgegeben wird, wenn keine Übereinstimmung gefunden wird (der Standardwert der Zeichenfolge ist null, int ist 0, bool ist false usw.).
Testen Sie diesen Code unter https://rextester.com/TXDL57489
quelle