从foreach循环中排除某些东西

时间:2016-11-15 06:09:34

标签: c#

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

2 个答案:

答案 0 :(得分:3)

在foreach循环中尝试catch块

尝试以下

foreach(var i in listRegistryKey)
{
    try
    {
        //Your code


    }
    catch(Exception e)
    {
        //Handle Exception
    }
}

如果在foreach循环中处理异常并且在处理之后循环将继续使用列表中的下一个项目,就像这样。

答案 1 :(得分:3)

好吧,如果你可以先检查你是否有权做某事

e.g。

 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
}