【问题标题】:How to write an if statement for "a list does not contain a string"?如何为“列表不包含字符串”编写 if 语句?
【发布时间】:2012-09-18 07:51:11
【问题描述】:

以下 IF 语句检查 ListexceptionCM 是否包含下拉列表的选定值。

List<string> ExceptionCM = new List<string>;
if(exceptionsCM.Any(s => ddl_model.SelectedValue.Contains(s)) )
{
       //do something
}

List<string> ExceptionPM;
List<string> ExceptionDL;
List<string> ExceptionCL;

我想更改语句,因此我可以检查 4 列表是否不包含下拉列表的选定值。你能帮帮我吗?

【问题讨论】:

    标签: c# list contains


    【解决方案1】:

    你可以这样做:

    //combine all lists into a single IEnumerable<string>
    IEnumerable<string> unionList = ExceptionCM.Union(ExceptionPM)
                                                  .Union(ExceptionDL)
                                                      .Union(ExceptionCL);
    
    //check against union list
    if(unionList .Any(s => !ddl_model.SelectedValue.Contains(s)) )
    {
       //do something
    }
    

    类似的东西。

    【讨论】:

      【解决方案2】:

      您可以使用All 确保4 个列表中的所有项目不包含:

      var exceptions = new List<List<string>>()
      {
          ExceptionCM, 
          ExceptionPM, 
          ExceptionDL, 
          ExceptionCL
      }
      
      if (exceptions.SelectMany(ex => ex)
                    .All(s => !ddl_model.SelectedValue.Contains(s)))
      {
      }
      

      编辑:Any 在这种情况下是不正确的,因为它确定集合的任何元素是否满足条件。

      【讨论】:

      • 可能是一个“!”在 ddl_model.SelectedValue.Contains(s) 之前?
      • @NK:我使用 All 而不是 Any() 编辑了我的答案,在这种情况下 Any() 不正确
      【解决方案3】:
      List<string> ExceptionCM = new List<string>;
      foreach(List<yourType> list in YourLists<List<YourType>>)
      {
          if(exceptionsCM.Any(s => !list.Contains(s)) )
          {
             //do something
          }
      {
      List<string> ExceptionPM;
      List<string> ExceptionDL;
      List<string> ExceptionCL;
      

      只需添加 ! (非)运算符在返回布尔值的 ddl_model.SelectedValue.Contains(s) 之前。

      【讨论】:

      • 并检查是否不包含其他 3 个列表,我可以在 ? 之间使用 &&
      • 谢谢。但我必须检查其他 3 个列表是否不包含所选值。我如何以最有效的方式做到这一点?我可以使用:if(exceptionsCM.Any(s => !ddl_model.SelectedValue.Contains(s)) && if(exceptionsPM.Any(s => !ddl_model.SelectedValue.Contains(s)) && ... 吗?跨度>
      • 你可能会进行一次 foreach 迭代吗?
      • 是的,您可以使用 && 运算符。与您在上面显示的方式相同。
      猜你喜欢
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 2012-02-12
      • 2013-04-01
      • 2018-11-25
      • 1970-01-01
      相关资源
      最近更新 更多