이 질문에는 이미 답변이 있습니다.
나는 간단한 라이브러리를 써서 List of names를 반환한다.
하지만, 아무것도 못 찾으면 무엇을 돌려 주어야합니까?
return new List<String>();
또는
return null;
예:
var resultColl=FindNames(...);
이 코드는 다른 구성 요소에서 사용할 수 있으며 손상 시키길 원하지 않습니다. 만약 내가 null을 반환 - 나는 그것을 확인하는 올바른 방법이라고 생각합니다. 하지만, 내가 빈 목록을 반환해야 할 수도 있습니다?
고맙습니다.
빈 사용자 목록을 반환하면 함수 사용자가 더 편리합니다.
foreach (string name in FindNames(...))
{
Display(name);
}
null을 반환하면 발신자에게 추가 코드를 작성하게합니다.
추가 로컬 변수 (함수를 두 번 호출하지 않아도 됨)
List<string> names = FindNames(...);
if (names != null)
{
foreach (string name in names)
{
Display(name);
}
}
따라서 빈 목록을 반환하는 것이 좋습니다.
나는 돌아올거야.Enumerable.Empty<string>()
, 또는 당신의 메소드가 List를 리턴해야한다면, doreturn new List<string>()
. 빈 목록을 반환해야하는 상황이 많은 경우 매번 반환되는 정적 목록을 만들 수 있습니다. 이렇게하면 매번 새로운 빈 목록을 만들지 않아도됩니다.@YuvalItzchakov
.
빈 콜렉션이 다음보다 낫다.null
내 의견으로는 더 깨끗한 코드로 이어질 것입니다.
Enumerable.Empty<string>().ToList();
- Yuval Itzchakovnew List<string>();
- Rob♦IEnumerable<string>
,이 컴파일되지 않습니다. 그가 사용했던List<string>
, 나는 그가 사용하고있는 것으로 생각했다. - Yuval ItzchakovList<string>
그것이 변환 될 필요가있을 것으로 예상되지만, 다시 Enumerable.Empty 중복 사용하게됩니다. - npintistatic List<string>
성능이 현명 할 것입니다. - Yuval Itzchakov
호출하는 코드가 목록을 반복하거나 List로 항목을 수행하려고 할 가능성이 큽니다. 빈 목록을 다시 전달하면 호출 코드가 제대로 작동합니다. null를 돌려주는 경우, 호출 측의 코드는리스트를 확실히 보관 유지할 필요가있다.
그것은 단지 선호의 문제 일뿐입니다.하지만 빈 목록을 반환하면 내 표를 얻습니다. 계약서에서 반환하겠다고 말한 것을 반환합니다.
이는 코드의 의미에 달려 있습니다.
허용되는 결과가 없으면 빈 콜렉션을 리턴해야합니다.
결과가 오류 조건이 아니면 null을 리턴하십시오.
나는 당신이 돌아올 것이 없을 때 당신이하는 일에서 당신이 일관성을 유지할 것을 제안합니다. 이런 식으로 당신은 당신이 아무것도 요구하지 않는 동일한 유형의 응답을 기대하는 어떤 것을 항상 알고 있습니다. 빈 집합이나 빈 문자열 또는 0 등을 항상 반환한다는 것을 알고있는 경우
당신이 가지고있는 다른 도서관 물건들에 관해서 당신은 무엇을합니까?
더 자세한 대답은Tuple<bool, List<string>>
. 이것은 검색에 대한 다른 세부 정보를 포함하도록 수정할 수있는 명확한 솔루션입니다.
var thereAreResults = foundList.Count > 0;
return new Tuple<bool, List<String>>(thereAreResults, foundList);
List<T>
조금도. 빈 반환IList<T>
가능하다면 비워 둡니다.IEnumerable<T>
대신. - Dennis