使用单行迭代和更新BindingList项

时间:2012-10-02 22:46:04

标签: list foreach compact-framework bindinglist compact-framework2.0

我有一个 BindingList 我想要更新某些项目,但是为了使用仅用于列表<> Foreach 我必须使用 BindingList 项初始化新的列表。像这样:

new List<ScanData>(ScanDataList)
.FindAll(i => i.Badge == badge)
.ForEach(x =>x.EmpName = empname);

这是我发现的最简单的方法,但我不想从关键字开始,有没有其他更简单的方法来迭代 BindingList 项目并使用如上所述的单线程更新它们? (为了便于阅读,我把它分为三行)。 我只想删除关键字,但这不起作用, 如果一个新函数有助于这也是可以接受的,如果它对任何 BindingList 的通用都是完美的。

  • 注意:我使用的是紧凑型框架2.0
  • 我不想初始化一个不会使用的变量。

感谢。

1 个答案:

答案 0 :(得分:1)

这个问题有点傻。您没有理由在一行代码中执行此操作并避免声明变量。如果使用new运算符,则初始化对象的实例,无论是否为其声明变量。

话虽这么说,我不知道你的ScanDataList是什么......有一个等同于FindAll的linq表达式叫做Where,它可能比FindAll更有效(因为它不需要创建一个新的列表,它只是懒惰迭代)。如果您的ScanDataList已经是IEnumerable,那么你可能会做这样的事情......

ScanDataList.Where(i =&gt; i.Badge == badge).ToList()。ForEach(x =&gt; x.EmpName = empname);

即使您的ScanDataList不可枚举,您也可以实现自己的扩展方法来帮助您实现这一目标,但对于可以轻松实现而无需任意不必要的约束(无新的,不是变量等)。

因此,为了澄清,我可能会使用.Where LINQ表达式,因为它可能更高效,因为它不需要创建新的List。但是,使用相同的逻辑,我可能会避免使用ToList()并将代码分成两行,例如。

foreach(Employee emp in ScanDataList.Where(i => i.badge == badge))
  emp.EmpName = empname;

这样,就不会创建其他列表。