我有(PatchFacilityManager)列表和(Int)facilityManagerId列表.我想使下面的代码有效.有没有办法删除这两个foreach循环.
foreach (PatchFacilityManager PM in patchFacilityManager)
{
foreach (int FM in facilityManagerId)
{
if (PM.FacilityManagerId == FM)
{
PM.IsSelected = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一种方式,
foreach (PatchFacilityManager PM in patchFacilityManager)
{
PM.IsSelected = facilityManagerId.Contains(PM.FacilityManagerId);
}
Run Code Online (Sandbox Code Playgroud)
与问题中给出的代码相比,该解决方案在两种方式上是有效的.
首先,它不测试条件,表达式的结果直接分配到PM.IsSelected中.根据LukeH的评论,必须不将PM.IsSelected设置为false,因此条件是不可避免的.但是,如果被要求将其设置为false,则此改进适用..从提问者的评论来看,他的案例似乎与这种优化有关.所以不需要条件赋值.
其次,它不会遍历整个列表,因为List.Contains(int),返回true并在第一次出现在参数中传递的int时出现循环.
第三,当框架为您提供List.Contains(int)功能时,为什么要重新发明轮子.因此从维护角度来看,这也更有效.
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |