【问题标题】:exclude something from foreach loop从 foreach 循环中排除某些内容
【发布时间】:2017-03-28 22:35:03
【问题描述】:

有没有办法从 foreach 循环中排除某些内容。我正在读取一堆注册表项,并且有一个文件夹没有读取权限,因此它会出错并使 foreach 循环无效。

【问题讨论】:

    标签: c#


    【解决方案1】:

    好吧,如果你能先检查一下你是否有权限做某事

    例如

     public static bool CanReadKey(this RegistryPermission reg, string key)
        {
            try
            {
                RegistryPermission r = new RegistryPermission(RegistryPermissionAccess.Read, key);
                r.Demand();
                return true;
            }
            catch (SecurityException)
            {
                return false;
            }
        }
    
    foreach (var key in keys){
        if(!CanReadKey(registry, key)){ continue; }
    
        // do stuff ...
    }
    

    This可能对你有帮助,看看吧。

    如果您真的想将其从循环中排除,您可以查看 Lambda,您可以在其中先进行过滤,然后再运行它。

    看起来像这样(伪代码)

    foreach(var key in keys.where(x => CanReadKey(registry, x))){
        // do stuff
    }
    

    【讨论】:

      【解决方案2】:

      在 foreach 循环中有 try catch 块

      试试下面的

      foreach(var i in listRegistryKey)
      {
          try
          {
              //Your code
      
      
          }
          catch(Exception e)
          {
              //Handle Exception
          }
      }
      

      如果在 foreach 循环中处理了一个异常,并且在处理它之后循环将继续列表中的下一项。

      【讨论】:

      • 从迂腐的角度来说,这并不排除 foreach 中的项目,它处理 foreach 中的项目。我不知道这是否值得说:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      相关资源
      最近更新 更多