我有一个 BindingList 我想要更新某些项目,但是为了使用仅用于列表<> 的 Foreach 我必须使用 BindingList 项初始化新的列表。像这样:
new List<ScanData>(ScanDataList)
.FindAll(i => i.Badge == badge)
.ForEach(x =>x.EmpName = empname);
这是我发现的最简单的方法,但我不想从新关键字开始,有没有其他更简单的方法来迭代 BindingList 项目并使用如上所述的单线程更新它们? (为了便于阅读,我把它分为三行)。 我只想删除新关键字,但这不起作用, 如果一个新函数有助于这也是可以接受的,如果它对任何 BindingList 的通用都是完美的。
感谢。
答案 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;
这样,就不会创建其他列表。