2013-05-26 2 views
1

Я пытаюсь использовать рекурсивный встроенный в методе:Выход внутри Try блока

public IEnumerable<string> Foo(string path) 
{ 
    try 
    { 
     foreach (string file in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)) 
     { 
      yield return file; 
     } 
    } 
    catch (Exception) 
    { } 
} 

И получил эту ошибку:

Cannot yield a value in the body of a try block with a catch clause

Как я могу использовать try-catch для того, чтобы избежать меня метод врезаться У меня нет разрешения на папку?

+0

Этот фрагмент кода не имеет большого смысла. Что вы хотите сделать, если поймаете исключение? В конце концов, блок исключений * является * логикой метода, иначе вы могли бы просто вызвать Directory.EnumerateFiles в своей программе напрямую. – nvoigt

+0

Из [Ошибка компилятора CS1626] (http://msdn.microsoft.com/en-us/library/cs1x15az (v = vs.90) .aspx) 'Оператор yield не разрешен в блоке try, если есть catch, связанное с блоком try. Чтобы избежать этой ошибки, переместите оператор yield из предложения catch. «Конечно, это не полностью отвечает на ваш вопрос. –

+0

Вы имеете в виду просто поместить Directory.EnumerateFiles (путь, "*. *", SearchOption.AllDirectories) внутри foreach и внутри Try? – user2214609

ответ

1
public IEnumerable<string> Foo(string path) 
{ 
    var files = new List<string>(); 
    try 
    { 
     files.AddRange(Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)); 
    } 
    catch (Exception) 
    { 
     // this is bad style. You should catch more specific exceptions 
    } 

    return files; 
} 
+0

Если вы делаете это (не ленивый) способ, вы можете просто использовать 'Directory.GetFiles()' вместо этого. – svick

Смежные вопросы