C# 带索引的Lambda-ForEach

C# 带索引的Lambda-ForEach,c#,lambda,C#,Lambda,以下是列名列表: var colNames = new List<string> { "colE", "colL", "colO", "colN" }; 这可以用一行lambda表达式编码吗?使用循环产生副作用。使用查询从现有数据计算新数据: var updates = colNames.Select((x, index) => new { col = grid_ctrl.Columns[x].VisibleIndex, index }) .ToList(); fore

以下是列名列表:

var colNames = new List<string> { "colE", "colL", "colO", "colN" };

这可以用一行lambda表达式编码吗?

使用循环产生副作用。使用查询从现有数据计算新数据:

var updates =
 colNames.Select((x, index) => new { col = grid_ctrl.Columns[x].VisibleIndex, index })
 .ToList();

foreach (var u in updates)
 u.col.VisibleIndex = u.index;
在查询中隐藏副作用可能会带来令人不快的惊喜。我们仍然可以使用查询来完成大部分工作

您还可以使用
List.ForEach
产生这些副作用。然而,这种方法的可扩展性不强。它不像查询那样通用。

是的,给您:

colNames.ForEach((x) => grid_ctrl.Columns[x].VisibleIndex = colNames.IndexOf(x));
请注意,列表中需要唯一的字符串,否则
.IndexOf
将表现不好。 不幸的是,LINQ
.ForEach
,因为它的相对
ForEach
没有提供枚举索引

colNames.ForEach((x) => grid_ctrl.Columns[x].VisibleIndex = colNames.IndexOf(x));