3

我有一个列表/数组,需要处理某些元素,但在处理中还需要元素的索引。例子:

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

但是不能将“索引”属性与列表一起使用,相反,如果名称在数组中,我不能使用 Foreach ......有什么建议吗?

4

3 回答 3

7

您应该使用一个简单的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 })
于 2010-06-06T11:48:05.683 回答
4

是的,有一种方法不使用循环。

你只需要.ToList()你的.Where()条款

Names.Where(s => s != "mary").ToList().Foreach(MyObject.setInfo(s.index, "blah");
于 2015-10-21T23:35:15.910 回答
1

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,名字是 john

索引 = 1,名字是 john

索引 = 2,名字是 bob

索引 = 3,名字是 simon

于 2016-03-04T04:19:52.990 回答