Szukając odpowiedzi na to pytanie, natknąłem się na podobne z użyciem LINQ, ale nie byłem w stanie ich w pełni zrozumieć (a tym samym zaimplementować), ponieważ nie jestem z nimi zaznajomiony. Zasadniczo chciałbym to zrobić:
- Sprawdź, czy którykolwiek element listy zawiera określony ciąg.
- Jeśli tak, zdobądź ten element.
Naprawdę nie wiem, jak bym to zrobił. Oto co mogę wymyślić (oczywiście nie działa):
if (myList.Contains(myString))
string element = myList.ElementAt(myList.IndexOf(myString));
Wiem DLACZEGO to nie działa:
myList.Contains()
nie zwracatrue
, ponieważ sprawdza, czy cały element listy pasuje do podanego przeze mnie ciągu.myList.IndexOf()
nie znajdzie wystąpienia, ponieważ, jak ma to miejsce ponownie, sprawdzi, czy występuje element pasujący do łańcucha.
Nadal nie mam pojęcia, jak rozwiązać ten problem, ale myślę, że będę musiał użyć LINQ, jak zasugerowano w podobnych pytaniach do mojego. Biorąc to pod uwagę, jeśli tak jest w tym przypadku, chciałbym, aby osoba odpowiadająca wyjaśniła mi użycie LINQ w ich przykładzie (jak powiedziałem, nie przejmowałem się tym w swoim czasie z C #). Z góry dziękuję chłopaki (i dziewczęta?).
EDYCJA: mam rozwiązanie; po prostu przejrzyj listę, sprawdź, czy bieżący element zawiera ciąg, a następnie ustaw ciąg równy bieżącemu elementowi. Zastanawiam się jednak, czy istnieje wydajniejszy sposób niż ten?
string myString = "bla";
string element = "";
for (int i = 0; i < myList.Count; i++)
{
if (myList[i].Contains(myString))
element = myList[i];
}
myString
, w bieżącej pętli otrzymasz ostatni element. To zależy od Ciebie, czy chcesz znaleźć pierwszą, czy ostatnią, jeśli chcesz znaleźć pierwszą, a następnie przerwij pętlę po znalezieniu przedmiotu.