如何使用Lambda表达式遍历对象列表

时间:2013-12-05 17:57:12

标签: c# .net reflection lambda

我有一个对象,里面是另一个对象列表。

我要做的是遍历列表并从列表中取每个值来设置标签。所以,如果我的列表中有5个值:

for (x=0; list.count; x++)
{
  lblDayOne.Text = list[x].DayOne.Value; <-I want to set this with the value relevant for Day One and so on and so forth for each label as below
  lblDayTwo.Text = list[x].DayTwo.Value;
  lblDayThree.Text = list[x].DayThree.Value;
  lblDayFour.Text = list[x].DayFour.Value;
  lblDayFive.Text = list[x].DayFive.Value;
}

有办法做到这一点吗?我试过foreach但没有运气。这都是C#

1 个答案:

答案 0 :(得分:2)

致电List<T>.ForEach()。传递一个lambda。

Enumerable.Range(0,9).ToList().ForEach( n => Console.WriteLine(n) );

<强>更新

等一下,你是不是试图迭代你的对象列表,而是迭代列表中每个对象的属性列表(DayOne,DayTwo等),也可能自动将它们与变量链接起来相似的名字?不,C#中没有类似的东西。你必须使用反射来自己动手,这对很少的回报来说是很多工作。

您可以考虑将这些值存储为不是属性,而是存储在Dictionary<String,String>或数组String DayValues[]中;其中任何一个都支持迭代,但你仍然有问题是以编程方式将项目与标签控件连接起来。但是,您可以按名称查找控件,具体取决于您执行UI的方式 - 例如,ASP.NET具有FindControl(string id)

但是你所拥有的是一种非常清晰,可读的方式,就像它一样。这就是我在生产代码中执行此操作的方法,除了我将list[x]分配给循环块顶部的局部变量以稍微清除视觉噪声。一个迭代的lambda解决方案会牺牲聪明的清晰度,而不是你必须维护的代码的良好权衡。如果它只是有趣的代码,另一方面,通过各种方式伸展和学习新的东西。 Lambdas are a fantastic toy

如果那是你要问的问题,你应该编辑你的问题以便清楚。