我有一个对象,里面是另一个对象列表。
我要做的是遍历列表并从列表中取每个值来设置标签。所以,如果我的列表中有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#
答案 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。
如果那是你要问的问题,你应该编辑你的问题以便清楚。