将收集项目与列表项目进行比较以查找匹配项

时间:2014-03-04 06:18:47

标签: c# windows-update

我的目标是获取未在例外列表中明确调出的任何待处理Windows更新,并将其转储到安装的更新的辅助UpdateCollection中。我的伪代码如下所示:

包含不应安装的更新的KB编号的字符串列表:

List<string> windowsUpdateExceptionKBList
KB1234567
KB2644615
KB483729

包含更新对象的WUApiLib.UpdateCollection

UpdateCollection securityUpdatesList
Iupdate object1
Iupdate object2

每个更新对象都有一个包含KB编号的“.Title”属性(例如,基于x64的系统的Windows 7安全更新(KB2644615))。我需要以下内容:

UpdateCollection securityUpdatestoInstall = new UpdateCollection();

foreach (Iupdate update in securityUpdatesList)
 {  
 foreach (string kB in windowsUpdateExceptionKBList)
    { 
        if (!update.Title **contains** kB)
           {
              securityUpdatestoInstall.Add(update);
           }
    }
 }

以上内容不会像提议的那样工作,因为由于嵌套的foreach循环,它会向列表添加重复更新。但我很难概念化如何在C#中实现这一目标。

1 个答案:

答案 0 :(得分:1)

如果未找到匹配项,则需要采取措施,因此添加变量以跟踪是否找到匹配项,并在第一项匹配项中突破内部foreach,然后有条件地添加更新,具体取决于是否匹配被发现:

UpdateCollection securityUpdatestoInstall = new UpdateCollection();

foreach (Iupdate update in securityUpdatesList)
{
    bool blacklisted = false;
    foreach (string kB in windowsUpdateExceptionKBList)
    { 
        if (update.Title.Contains(kB))
           {
              blacklisted = true;
              break;
           }
    }
    if (!blacklisted)
    {
         securityUpdatestoInstall.Add(update);
    }
 }

另请注意,您可以使用string.Contains,因此我也添加了(并注意它区分大小写)。