2016-11-15 5 views
1

foreachループから何かを除外する方法はありますか?私はレジストリキーの束を読んでいるので、読み込み権限のないフォルダが1つあり、エラーが発生してforeachループが無効になります。foreachループから何かを除外する

答えて

3

、あなたが何か

例えばを行うには許可を得た場合、あなたが最初にチェックすることができれば

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 
} 
3

例外がforeachループで処理される場合には、このよう次

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


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

を試してみて、それを処理した後、ループは、リスト内の次の項目を続けますforeachループ内でcatchブロックを試してみます。まあ

+1

はpedanticallyこれはforeachのから項目を除外しないに言えば、それはforeachの内のアイテムを処理します。私はそれが価値があるかどうかわからない:) – SlightlyKosumi

関連する問題