당신이해야 할 첫 번째 일은 사용하는 방법을 변경할 수 있습니다 : 그것은 결과를 얻을 수 있기 때문에
var files = from f in System.IO.Directory.EnumerateDirectories(
@"\\testnetwork\abc$",
"*.*",
SearchOption.AllDirectories)
select f;
EnumerateDirectories
더 잘 작동하고, 여전히 발생 같은 강타가없는 폴더를 발견했을 경우와 같은 예외입니다. 는 결과를 얻을 수 있다는 사실은 그 출력의 상단에 구성 할 수있게 해준다, 그래서 우리는 다음과 같이 확장 메서드를 추가하는 경우 :
var files = from f in System.IO.Directory.EnumerateDirectories(
@"\\testnetwork\abc$",
"*.*",
SearchOption.AllDirectories)
.Catch(typeof(UnauthorizedAccessException))
select f;
: 우리가 이런 식으로 뭔가를 쓸 수 있습니다
다음
static class ExceptionExtensions
{
public static IEnumerable<TIn> Catch<TIn>(
this IEnumerable<TIn> source,
Type exceptionType)
{
using (var e = source.GetEnumerator())
while (true)
{
var ok = false;
try
{
ok = e.MoveNext();
}
catch(Exception ex)
{
if (ex.GetType() != exceptionType)
throw;
continue;
}
if (!ok)
yield break;
yield return e.Current;
}
}
}
및 귀하의 출력은 여전히 깨끗하고 구성 가능한 Linq 표현을 유지하면서 예상 한해야합니다. Catch
메서드의 아이디어는 다른 것들을 발생시키지 않고 주위에 원하지 않는 예외를 "삼키는"것입니다. 초안 구현이지만 아이디어를 얻을 수 있습니다.
지난 해에 오류가 발생했기 때문에 Wasp에서 언급 한대로 답변을 업데이트했습니다. –