Анонимный метод, который вы используете, будет преобразован в делегат Predicate<string>
компилятором.Имея это в виду, вы можете ввести локальный код, чтобы избавиться от ненужной избыточности.
Predicate<string> containsStr = delegate(string s) { return s.Contains(str); };
if (list.Exists(containsStr))
{
string name = list.Find(containsStr);
...
}
В C # 3.0 или более поздних версиях это можно выразить еще более кратко с помощью лямбда-выражений.
Predicate<string> containsStr = s => s.Contains(str);
С другой стороны, вам не нужно сначала проверять, существует ли str
, а затем приступить к его поиску (при условии, что список не содержит нулей), вы можете просто сделать:
string name = list.Find(s => s.Contains(str));
if(name != null)
{
//found
}
Конечно, я должен также отметить, что строки не содержат никаких дополнительных метаданных, кроме присутствующих в них символов, поэтому вы ничего не получите, «найдя» строку в списке надпросто доказательство его существования (если вы не имели в виду FindIndex
).