9

이 질문에는 이미 답변이 있습니다.

나는 간단한 라이브러리를 써서 List of names를 반환한다.

하지만, 아무것도 못 찾으면 무엇을 돌려 주어야합니까?

return new List<String>();

또는

return null;

예:

var resultColl=FindNames(...);

이 코드는 다른 구성 요소에서 사용할 수 있으며 손상 시키길 원하지 않습니다. 만약 내가 null을 반환 - 나는 그것을 확인하는 올바른 방법이라고 생각합니다. 하지만, 내가 빈 목록을 반환해야 할 수도 있습니다?

고맙습니다.


  • 빈 목록은 괜찮을 거라고 생각 instad null을 - Ehsan Sajjad
  • 참고로 돌아 가지 않아야합니다.List<T>조금도. 빈 반환IList<T>가능하다면 비워 둡니다.IEnumerable<T>대신. - Dennis

8 답변


15

항상 빈 목록을 반환해야합니다. 자세한 내용은컬렉션 지침.

컬렉션 프로퍼티 또는 메소드로부터 null 값을 반환하지 마십시오.   컬렉션을 반환합니다. 하늘의 콜렉션 또는 하늘의 배열을 돌려줍니다.   대신.


  • 절대 사용하지 마십시오.null가능한 한 많이. 그것의 라이브러리는 일부 빈 구현물을 제공해야합니다. - zinking

5

빈 사용자 목록을 반환하면 함수 사용자가 더 편리합니다.

foreach (string name in FindNames(...))
{
   Display(name);
}

null을 반환하면 발신자에게 추가 코드를 작성하게합니다.

  • null에 대한 테스트
  • 추가 로컬 변수 (함수를 두 번 호출하지 않아도 됨)

    List<string> names = FindNames(...);
    
    if (names != null)
    {
       foreach (string name in names)
       {
          Display(name);
       }
    }
    

따라서 빈 목록을 반환하는 것이 좋습니다.


5

나는 돌아올거야.Enumerable.Empty<string>(), 또는 당신의 메소드가 List를 리턴해야한다면, doreturn new List<string>(). 빈 목록을 반환해야하는 상황이 많은 경우 매번 반환되는 정적 목록을 만들 수 있습니다. 이렇게하면 매번 새로운 빈 목록을 만들지 않아도됩니다.@YuvalItzchakov.

빈 콜렉션이 다음보다 낫다.null내 의견으로는 더 깨끗한 코드로 이어질 것입니다.


  • 당신은 아마Enumerable.Empty<string>().ToList(); - Yuval Itzchakov
  • @YuvalItzchakov 왜? 그 길로 가면, 그냥 해.new List<string>(); - Rob
  • @Rob OP가 수신하지 않는 한IEnumerable<string>,이 컴파일되지 않습니다. 그가 사용했던List<string>, 나는 그가 사용하고있는 것으로 생각했다. - Yuval Itzchakov
  • @YuvalItzchakov : 나는 OP가 무엇을 기대하는지 모르지만, 만약List<string>그것이 변환 될 필요가있을 것으로 예상되지만, 다시 Enumerable.Empty 중복 사용하게됩니다. - npinti
  • @npinti이 경우, 나는static List<string>성능이 현명 할 것입니다. - Yuval Itzchakov

3

호출하는 코드가 목록을 반복하거나 List로 항목을 수행하려고 할 가능성이 큽니다. 빈 목록을 다시 전달하면 호출 코드가 제대로 작동합니다. null를 돌려주는 경우, 호출 측의 코드는리스트를 확실히 보관 유지할 필요가있다.

그것은 단지 선호의 문제 일뿐입니다.하지만 빈 목록을 반환하면 내 표를 얻습니다. 계약서에서 반환하겠다고 말한 것을 반환합니다.


2

클라이언트 코드가 null 검사를 수행 할 필요가 없기 때문에 빈 컬렉션을 반환하는 것이 디자인 관점에서 더 좋습니다. 만나다Null 객체 패턴.


1

이는 코드의 의미에 달려 있습니다.

허용되는 결과가 없으면 빈 콜렉션을 리턴해야합니다.

결과가 오류 조건이 아니면 null을 리턴하십시오.


  • 결과가 오류 조건이 아니면 예외를 throw하는 것을 고려하십시오! - Matthew Watson
  • @ 매튜 왓슨 당신 말이 맞습니다. 예외는 null을 반환하는 것보다 낫습니다. - Domysee

1

나는 당신이 돌아올 것이 없을 때 당신이하는 일에서 당신이 일관성을 유지할 것을 제안합니다. 이런 식으로 당신은 당신이 아무것도 요구하지 않는 동일한 유형의 응답을 기대하는 어떤 것을 항상 알고 있습니다. 빈 집합이나 빈 문자열 또는 0 등을 항상 반환한다는 것을 알고있는 경우

당신이 가지고있는 다른 도서관 물건들에 관해서 당신은 무엇을합니까?


0

더 자세한 대답은Tuple<bool, List<string>>. 이것은 검색에 대한 다른 세부 정보를 포함하도록 수정할 수있는 명확한 솔루션입니다.

var thereAreResults = foundList.Count > 0;
return new Tuple<bool, List<String>>(thereAreResults, foundList);


  • downvoter에서 이유는 없습니까? - tomab
  • 그것은 끔찍한 끔찍한 디자인입니다. 또한 컴파일되지 않습니다. - Rob
  • 나는 투표를하지 않았지만 발신자가 전화를 걸 수 있기 때문에 이것은 무의미한 것처럼 보입니다.Count반환 된 목록에 있거나 반복 가능성이있는foreach. 또한 당신은return Tuple.Create(thereAreReullts, foundList);대신. - juharr
  • 강조는 그냥 빈 List ()보다 더 많은 정보를 포함하는 방법이었습니다. 신경 쓰지 마. - tomab

연결된 질문


최근 질문