Поиск индекса элемента List по значению

157
18 апреля 2018, 05:46

Есть List<Student> students со свойствами:

public int Id { get; set; }
public string Name { get; set; }

Есть переменная

string text;

Нужно найти индекс List-а students такого, что свойство Name совпадало со строкой text (Name == text), используя LINQ и лямбда выражения.

Answer 1

В классе List есть специальный метод FindIndex, принимающий предикат. В качестве предиката можно передать лямбда выражение. Хоть здесь и не используются методы Linq, но этот способ более эффективен (один проход по списку):

var students = new List<Student>()
{
    new Student { Id = 0, Name = "Ivan" },
    new Student { Id = 1, Name = "Petr" },
    new Student { Id = 2, Name = "Oleg" },
};
var needle = "petr";
int index = students.FindIndex(s =>
    string.Equals(s.Name, needle, StringComparison.CurrentCultureIgnoreCase));
Console.WriteLine(index);
Answer 2

Как-то так:

void Main()
{
    List<Student> students = new List<Student>()
    {
        new Student{Id = 0, Name = "Ivan"},
        new Student{Id = 1, Name = "Petr"},
        new Student{Id = 2, Name = "Oleg"},
    };
    var needle = "petr";
    var elem = students.FirstOrDefault(x => string.Equals(x.Name, needle, StringComparison.InvariantCultureIgnoreCase));
    var index = students.IndexOf(elem);
}
// Define other methods and classes here
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
}

От linq здесь поиск студента, а раз вам нужен индекс - то здесь IndexOf

Answer 3

Можно добавить расширяющий метод

public static int IndexOf<T>(this IEnumerable<T> list, Predicate<T> condition)
{
    var i = -1;
    return list.Any(x => { i++; return condition(x); }) ? i : -1;
}

И искать одним запросом к списку

var index = students.IndexOf(x => 
            string.Equals(x.Name, needle, StringComparison.InvariantCultureIgnoreCase));
READ ALSO
Чем можно заменить WebBrowser C#?

Чем можно заменить WebBrowser C#?

Всем приветЧем в C# можно заменить WebBrowser? Кроме Awesomium

185
C# Photon - Проблема с RPC

C# Photon - Проблема с RPC

Не могу понять, если у меня два PunRPC метода в 1 скрипте, то если я вызываю первый метод у Мастер клиента, а второй уже у клиента(который отправил),...

165
Название с LIst добавить в ComboBox

Название с LIst добавить в ComboBox

Всем хай Вообщем проблема небольшая Как можно Doc передать в функцию AddData? Я просто через вторую форму даю Doc какой то текст, но оно далее не присваивает...

176
Отправка запросов на сервер

Отправка запросов на сервер

Есть сайт, мне нужно получать с него данныеЯ узнал, что нужно делать запрос к скрипту и получать от него ответ

184