我有一个列表/数组,需要处理某些元素,但在处理中还需要元素的索引。例子:
列表名称 = john, mary, john, bob, simon Names.Where(s => s != "mary").Foreach(MyObject.setInfo(s.index, "blah")
但是不能将“索引”属性与列表一起使用,相反,如果名称在数组中,我不能使用 Foreach ......有什么建议吗?
您应该使用一个简单的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 })
是的,有一种方法不使用循环。
你只需要.ToList()
你的.Where()
条款
Names.Where(s => s != "mary").ToList().Foreach(MyObject.setInfo(s.index, "blah");
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