【问题标题】:Comparing Collection Items to List Items to Find Matches将集合项与列表项进行比较以查找匹配项
【发布时间】:2014-03-04 14:25:32
【问题描述】:

我的目标是获取任何未在例外列表中明确指出的待处理 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# 中实现这一点。

【问题讨论】:

    标签: c# windows-update


    【解决方案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,所以我也添加了它(注意它区分大小写)。

    【讨论】:

    • 这是有道理的。关于如何执行“包含”操作的任何评论?
    • 有一种方法。我刚刚加进去了。
    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多