【问题标题】:How Iterate through a list of an object with Lambda Expressions如何使用 Lambda 表达式遍历对象列表
【发布时间】:2013-12-22 19:43:13
【问题描述】:

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

我要做的是遍历列表并从列表中获取每个值来设置标签。所以,如果我的列表中有 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#

【问题讨论】:

  • 你使用什么编程语言?
  • 见上面刚刚添加的修改
  • 如果你用谷歌搜索 c# foreach lambda,你会看到很多结果,前几个就在 StackOverflow 上。这确实是解决此类问题的第一件事。
  • 没有我要找的例子
  • 这个提到 List 有一种方法来遍历项目:stackoverflow.com/questions/339199/…

标签: c# .net reflection lambda


【解决方案1】:

致电List&lt;T&gt;.ForEach()。传递一个 lambda。

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

更新

等一下,您是否尝试不遍历对象列表,而是遍历列表中每个对象(DayOne、DayTwo 等)中的 PROPERTIES 列表,并且可能还自动将它们与变量链接起来相似的名字?不,在 C# 中没有这样的东西。您必须自己使用反射来滚动,这将是大量工作而回报却很少。

您可以考虑不将这些值存储为属性,而是存储在Dictionary&lt;String,String&gt; 或数组String DayValues[] 中;其中任何一个都将支持迭代,但您仍然会遇到以编程方式将项目与标签控件链接起来的问题。不过,您可能能够按名称查找控件,这取决于您如何处理 UI ——例如,ASP.NET 有 FindControl(string id)

但是您上面的内容是一种非常清晰易读的方式,就像它一样。这就是我在生产代码中的做法,除了我将list[x] 分配给循环块顶部的局部变量以稍微清除视觉噪音。迭代的 lambda 解决方案会为了聪明而牺牲清晰度,而不是您必须维护的代码的良好折衷。另一方面,如果它只是有趣的代码,那么一定要扩展并学习新的东西。 Lambdas are a fantastic toy

如果这确实是您要问的问题,您应该编辑您的问题以清楚起见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多