LAMBDA的ForEach与指数

问题描述:

这里是列名的列表:LAMBDA的ForEach与指数

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

基于在列表中列名的位置,我想使该列的可见指数等于列名的位置,但没有返回列表。换句话说,在结尾处没有“ToList()”的下列lambda表达式:

colNames.Select((x, index) => { grid_ctrl.Columns[x].VisibleIndex = index; return x; }).ToList(); 

这可以用单线lambda表达式编码吗?

是的,你在这里:

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

请注意,你需要的唯一字符串在列表中,否则将.IndexOf表现不好。 不幸的是LINQ .ForEach,因为其相对的foreach没有提供枚举索引。

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

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来产生这些副作用。然而,这种方法不是很有扩展性。它不像查询那么普遍。

+1

+1的建议。 – Christos 2014-10-30 15:23:46