0

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

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

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

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

谢谢。

4

1 回答 1

1

这个问题有点傻。没有理由你必须在一行代码中完成它并避免声明一个变量。如果你使用 new 操作符,你就是在初始化一个对象的实例,不管你是否为它声明一个变量。

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

ScanDataList.Where(i => i.Badge == badge).ToList().ForEach(x=>x.EmpName = empname);

即使您的 ScanDataList 不可枚举,您也可以实现自己的扩展方法来帮助您完成此任务,但对于可以轻松实现而无需任意不必要的约束(没有新的、没有变量等)的事情似乎需要做很多工作)。

所以为了澄清,我可能会使用 .Where LINQ 表达式,因为它可能更有效,因为它不需要创建新列表。但是,使用相同的逻辑,我可能会避免 ToList() 并将您的代码分成两行类似的东西。

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

这样,就不会创建额外的列表。

于 2012-10-10T21:19:30.230 回答