2017-09-05 14 views
-3

여러 null 검사 데 코드를 리팩토링 할 수 있습니다. 코드 조각은 다음과 같습니다. 나는 여러 foreach와 null 체크를 없애고 싶다.어떻게 중첩 된 foreach C#

C#에서 리팩토링 해 주실 수 있습니까?

foreach (var a in aa) 
{ 
    if (a.bb != null) 
    { 
     foreach (var b in a.bb) 
     { 
      if (b.cc != null) 
      { 
       foreach (var c in b.cc) 
       { 
        //perform something 
       } 
      } 
     } 
    } 
} 
+0

누구나 읽을 수있는 솔루션을 제공 할 수 있습니까? –

+1

코드 검토를 위해이 사이트를 사용하면 안되는 것으로 명시된 태그에 명시되어 있습니다. https://codereview.stackexchange.com/을 사용하십시오.이 질문은 여전히 ​​불충분하다고 생각합니다. –

+0

[mcve]가 좋을 것입니다. 코드를 복사, 붙여 넣기 및 실행할 수 있기를 바랍니다. – Enigmativity

답변

0

이 방법에 대해 :

aa.ForEachIfNotNull(
    a => a.bb.ForEachIfNotNull(
     b => b.cc.ForEachIfNotNull(
      c => { /* perform something */ }))); 
그냥이 확장 방법이 필요

:

public static class NullListEx 
{ 
    public static void ForEachIfNotNull<T>(this IEnumerable<T> source, Action<T> action) 
    { 
     if (source != null) 
     { 
      foreach (var t in source) 
      { 
       action(t); 
      } 
     } 
    } 
} 
0

당신은 LINQ를 사용할 수 있지만 내가 개선으로 볼 수 없습니다 :

aa.Where(a => a.bb != null).ToList().ForEach(a => a.bb.Where(b => b.cc != null).ToList().ForEach(c => { /* do something */ })); 

또한 n을 사용하여 테스트하지 않아도됩니다. ULL의 병합 연산자 :

foreach (var a in aa) { 
    foreach (var b in a.bb ?? Enumerable.Empty<bType>()) { 
     foreach (var c in b.cc ?? Enumerable.Empty<cType>()) { 
      //perform something 
     } 
    } 
} 

난 그냥 bTypecType에 넣어 a.bba.bb.cc의 요소의 유형을 몰랐 때문에.