2014-10-30 26 views
2

這裏是列名的列表: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表達式編碼嗎?

回答

0

是的,你在這裏:

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

請注意,你需要的唯一字符串在列表中,否則將.IndexOf表現不好。 不幸的是LINQ .ForEach,因爲其相對的foreach沒有提供枚舉索引。

2

使用循環來產生副作用。使用查詢從現有數據計算新的數據:在查詢

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