Как найти первую или последнюю строку в списке по StartsWith или Содержит искомое значение без добавления в другой список

Я пытаюсь понять, какие варианты я могу использовать, чтобы получить только одну строку с Contains или же StartsWith первая или последняя строка, которая содержит искомое значение или начинается с него. Но без создания нового списка и взятия первой или последней строки оттуда, результат на самом деле является ответом на этот вопрос, но мне интересно, возможно ли получить его непосредственно из списка, например, если содержимое списка:

  List<string> list = new List<string>()
            {
                "data file collection k"
                "file name collection l",
                "file data collection m",
                "name data collection a",
                "name data collection b",
                "data name collection c",
                "data file collection d"
            };

и поиск слова:

string val = "name";

Так вот так:

foreach (string str in List) 
{ 
     if (str.StartsWith(val)) 
     { 
         // ...
     } 
}

результат:

name data collection a
name data collection b

или если искать содержимое всей строки, например:

  var mtchVal = list.Where(stringToCheck => stringToCheck.Contains(val)); 

результат будет:

file name collection l
name data collection a
name data collection b
data name collection c

но желаемый результат с StartsWith должно быть:

name data collection a

и по всему содержанию:

file name collection l

2 ответа

Решение

Если разрешено linq, то

    var list = new List<string>();
    var first = list.FirstOrDefault(s => s.StartsWith("name"));
    var last = list.LastOrDefault(s => s.StartsWith("name"));

Для StartsWith случай, использовать

list.FirstOrDefault(stringToCheck => stringToCheck.StartsWith(val)); 

Для всего содержимого строки используйте

list.FirstOrDefault(stringToCheck => stringToCheck.Contains(val));
Другие вопросы по тегам