이미 question on SO about "possible multiple enumerations"이 있지만이 질문은보다 구체적입니다. "IsNullOrEmpty"검사에서도 "IEnumerable의 여러 열거 가능"경고를 표시합니다.
입력으로서IEnumerable<string>
소요의 각 요소에 대하여 소정의 방법을 실행하기 방법 고려 사항 : 상기 코드의
public static bool SomeMethod(IEnumerable<string> enumerable)
{
if (enumerable.IsNullOrEmpty())
{
// throw exception.
}
else
{
return (enumerable.All(SomeBooleanMethod));
}
}
를 IsNullOrEmpty
는
return (!ReferenceEquals(enumerable, null) || enumerable.Any());
문제는 ReSharper가 "가능한 여러 개의 IEnumerable 열거 형"에 대해 경고한다는 것입니다. 실제로 이것이 실제로 문제가 될 수 있는지 여부는 알 수 없습니다.
경고의 의미를 이해하지만 무효 또는 비어 있음을 확인하고 예외를 던질 필요가 있다면이 상황에서 실제로 무엇을 할 수 있습니까?
빈 시퀀스가 전달 된 경우 왜이 메소드를 throw 하시겠습니까? "이 (빈) 시퀀스의 모든 구성원에게 무언가를하십시오"라는 의미는 완벽하게 분명합니다. 또한'== null'이 아닌'ReferenceEquals()'를 사용하는 특별한 이유가 있습니까? – AakashM
실제로 이것은 아닙니다. 그러나 이제 이것이 생성자라고 상상해보십시오. 빈 시퀀스에서 객체를 만들 수없는 경우 exceptio를 던지지 않아야합니까? – User
물론, 당신이 할 수있는 일이 정말로 없다면; 그러나 일반적으로 * 빈 시퀀스는 비어 있지 않은 시퀀스처럼 잘 처리되어야한다고 말합니다. 'List <>'는 빈 시퀀스로부터 구성하는 것이 매우 행복합니다. 당연히 나는 일반화에서만 말하고있다. 당신은 당신의 상황에 대한 상세한 내용을 알고 있습니다. – AakashM