목록이 비어 있는지 확인하는 "가장 좋은"(속도와 가독성을 모두 고려) 방법은 무엇입니까? 목록이 유형 IEnumerable<T>
이고 Count 속성이없는 경우에도 마찬가지입니다.
지금 나는 이것 사이에 던지고있다 :
if (myList.Count() == 0) { ... }
이:
if (!myList.Any()) { ... }
내 생각에 두 번째 옵션은 첫 번째 항목을 보자 마자 결과를 반환 할 것이기 때문에 더 빠르지 만 두 번째 옵션 (IEnumerable의 경우)은 개수를 반환하기 위해 모든 항목을 방문해야합니다.
즉, 두 번째 옵션이 읽기 쉬운 것처럼 보입니까? 어느 걸 더 선호하십니까? 아니면 빈 목록을 테스트하는 더 좋은 방법을 생각할 수 있습니까?
@lassevk의 응답을 편집 하는 것은 가능한 경우 캐시 된 카운트를 사용하기위한 약간의 런타임 검사와 결합 된 가장 논리적 인 것 같습니다.
public static bool IsEmpty<T>(this IEnumerable<T> list)
{
if (list is ICollection<T>) return ((ICollection<T>)list).Count == 0;
return !list.Any();
}
list.Any()
과 동등 하지 list.IsEmpty
않습니까? 프레임 워크 방법은 최적화되어야합니다. 성능 병목 현상을 발견 한 경우에만 새 방법을 작성하는 것이 좋습니다.
IsEmpty
확장 메서드 를 추가하는 .NET Core 클래스 라이브러리에 문제를 제안했습니다 . github.com/dotnet/corefx/issues/35054 원하는 경우 확인하고 투표하고 동의하십시오.
is
및cast
있지만, 사용as
및null
확인 :ICollection<T> collection = list as ICollection<T>; if (collection != null) return colllection.Count;