LINQ / C #: где & Foreach, используя индекс в списке / массиве - PullRequest
2 голосов
/ 06 июня 2010

У меня есть список / массив, и мне нужно обработать определенные элементы, но мне также нужен индекс элемента при обработке. Пример:

List Names = john, mary, john, bob, simon
Names.Where(s => s != "mary").Foreach(MyObject.setInfo(s.index, "blah")

Но я не могу использовать свойство index со списками, наоборот, если имена были в массиве, я не могу использовать Foreach ... Есть предложения?

Ответы [ 3 ]

7 голосов
/ 06 июня 2010

Вы должны использовать простой цикл for, например:

var someNames = Names.Where(s => s != "mary").ToArray();

for (int i = 0; i < someNames.Length; i++)
    someNames.setInfo(i, "blah");

LINQ не является основным и конечным базовым циклом.

Если вы действительно хотите использовать LINQ, вам нужно позвонить Select:

Names.Where(s => s != "mary").Select((s, i) => new { Index = i, Name = s })
2 голосов
/ 22 октября 2015

Да, есть способ без использования цикла.

Вам просто нужно .ToList() ваше .Where() предложение

Names.Where(s => s != "mary").ToList().Foreach(MyObject.setInfo(s.index, "blah");
1 голос
/ 04 марта 2016

Foreach выполнять на каждом элементе из коллекции. Ссылка: https://msdn.microsoft.com/en-us/library/bwabdf9z(v=vs.110).aspx

Ниже приведен пример кода для вашего дела

List<string> Names = new List<string> { "john", "mary", "john", "bob", "simon" };

int index = 0;

Names.Where(s => s != "mary").ToList().ForEach(x => printItem(index++,x));

метод printItem

public static void printItem(int index, string name){
    Console.WriteLine("Index = {0}, Name is {1}",index,name);
}

Выход:

Индекс = 0, зовут Джон

Индекс = 1, имя Джон

Индекс = 2, Имя Боб

Индекс = 3, имя - Симон

...