Как найти индекс неопределенной строки в списке <T>
Вопрос
Насколько я понимаю, если я хочу получить идентификатор элемента в списке, я могу сделать это:
private static void a()
{
List<string> list = new List<string> {"Box", "Gate", "Car"};
Predicate<string> predicate = new Predicate<string>(getBoxId);
int boxId = list.FindIndex(predicate);
}
private static bool getBoxId(string item)
{
return (item == "box");
}
Но что, если я хочу сделать сравнение динамичным?Поэтому вместо проверки item=="box" я хочу передать делегату введенную пользователем строку и проверить, есть ли item==searchString.
Решение
Использование замыкания, созданного компилятором, с помощью анонимного метода или лямбда-выражения — хороший способ использовать пользовательское значение в выражении предиката.
private static void findMyString(string str)
{
List<string> list = new List<string> {"Box", "Gate", "Car"};
int boxId = list.FindIndex(s => s == str);
}
Если вы используете .NET 2.0 (без лямбды), это тоже будет работать:
private static void findMyString(string str)
{
List<string> list = new List<string> {"Box", "Gate", "Car"};
int boxId = list.FindIndex(delegate (string s) { return s == str; });
}
Другие советы
Ты можешь просто сделать
string item = "Car";
...
int itemId = list.FindIndex(a=>a == item);
string toLookFor = passedInString;
int boxId = list.FindIndex(new Predicate((s) => (s == toLookFor)));
List <string> list= new List<string>("Box", "Gate", "Car");
string SearchStr ="Box";
int BoxId= 0;
foreach (string SearchString in list)
{
if (str == SearchString)
{
BoxId= list.IndexOf(str);
break;
}
}
Не связан с StackOverflow