Как найти индекс неопределенной строки в списке <T> - PullRequest
7 голосов
/ 12 июня 2009

Насколько я понимаю, если я хочу получить идентификатор элемента в списке, я могу сделать это:

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.

Ответы [ 4 ]

18 голосов
/ 12 июня 2009

Использование сгенерированного компилятором замыкания через анонимный метод или лямбду - хороший способ использовать пользовательское значение в выражении предиката.

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; });
}
2 голосов
/ 12 июня 2009

Вы можете просто сделать

string item = "Car";
...

int itemId = list.FindIndex(a=>a == item);
1 голос
/ 12 июня 2009
string toLookFor = passedInString;
int boxId = list.FindIndex(new Predicate((s) => (s == toLookFor)));
0 голосов
/ 15 июня 2015
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;
            }
        }
...