2012-09-19 1 views
0

각 하위 구분 코드를 포함하여 하위 목록에 대한 정보 (내부 목록에 있음)가 포함 된 Division이라는 클래스가 있습니다. Subdivision 클래스에서 코드는 int로 저장됩니다. Division 클래스에서 List는 모든 코드를 저장하는 데 사용됩니다. 경우에 따라 분류가 없으므로 분류 번호가없는 분류가있을 것입니다. 또는 어떤 이유로 든 Subdivision에 대한 코드가 설정되지 않았을 수 있습니다. 따라서 기본값은 0입니다. 실제 코드가 없으면 목록을 반환하고 싶지 않습니다.설명 된 시나리오에 대해 빈 목록을 반환 할시기를 결정하는 좋은 방법입니까?

당신이 null을 반환하려면
public List<int> AllCodesList 
{ 
    get 
    { 
     return (from subdivision in SubdivisionInfoList 
       where subdivision.code > 0 
       select subdivision.code).ToList(); 
    } 
} 
+1

귀하의 우려를 이해할 수 있는지 모르겠지만 제 생각에는 빈 목록을 반환하는 것이 적합합니다. 예를 들어 null 참조를 반환하는 것보다 낫습니다. – gustavodidomenico

답변

2

null 대신 빈 목록을 반환하면 호출 코드가 훨씬 간단 해 지므로 일반적으로 좋습니다. null을 확인하지 않아도됩니다 (때때로 누락되어 악명 높은 null 포인터 예외가 발생할 수 있음).

빈 목록과 null을 구별하는 데 관심이있는 경우가 있지만 이러한 호출을 검토하고 반환되는 항목에 대해 메서드 이름이 명확한 지 확인하는 것이 좋습니다. 일부 리팩토링은 결코 null을 반환하지 않을 수 있습니다. . 당신의 경우에는 "하위 구분 없음"의 경우 빈 배열을 반환하는 것이 완벽하다고 생각합니다.

+0

나는 다른 사람과 그렇게 할 수 있었지만 대답으로 표시하고있다. (나중에) 응답. 이것을 확인하는 데 도움을 주신 모든 분들께 감사 드리며, LINQ 쿼리에서 ". Any"라는 알림을 보내 주셔서 감사합니다. – Stonetip

5

다음을 수행했다

public List<int> AllCodesList 
{ 
    get 
    { 
     List<int> subDivisions = null; 
     if (SubdivisionInfoList.Any(s => s.code > 0)) 
     { 
      subDivisions = (from subdivision in SubdivisionInfoList 
       where subdivision.code > 0 
       select subdivision.code).ToList(); 
     } 
     return subDivisions; 
    } 
} 

, 나는 개인적으로이의 팬이 아니다, 차라리 빈 목록을 반환합니다. 목록에서 무엇이든하기 전에이 속성을 호출 할 때 null 체크가 있는지 확인해야합니다 (반환되는 경우).

조지의 제안 : 그것은 subdevision.code 될이 더 적합 할 수 있습니다

public List<int> AllCodesList 
{ 
    get 
    { 
     var subDivisions = (from subdivision in SubdivisionInfoList 
          where subdivision.code > 0 
          select subdivision.code).ToList(); 

     if (subDivisions.Count == 0) 
     { 
      subDivisions = null; 
     } 

     return subDivisions; 
    } 
} 
+1

+1 직접 솔루션 + 사용 팁. –

+1

나는 한 번 열거 할만 큼 걸어 갈 수 있으므로 목록 수를 확인한 다음 제안 수를 확인하는 것이 좋습니다. –

+0

@GeorgeDuckett, 내 대답이 업데이트되었습니다. 당신의 제안을 사용하는 예제와 함께 : 좋은 전화. 어떤 이유에서인지, 나는 더 읽기 쉽지만, 한 번 더 열거하는 것이 더 좋은 생각입니다. – Gromer

2

당시로서는 명시 적으로 코드의 부재를 나타내지 만 네 그것이을 반환 아마 더 나은 수 있습니다 Nullable<int> (int?) 리스트를 사용하는 모든 코드는 별도의 null 검사를 수행해야하므로 null이 아닌 빈 목록이 필요합니다.