file.Headers의 요소 유형이 T라고 가정하면 다음을 수행 할 수 있습니다.
foreach(var header in file.Headers ?? Enumerable.Empty<T>()){
}
file.Headers가 null 인 경우 T의 빈 열거 형이 생성됩니다. 파일 유형이 내가 소유 한 유형 인 경우 Headers
대신 getter를 변경하는 것이 좋습니다. null
는 알 수없는 값이므로 가능한 경우 null을 "요소가 없음을 알고 있습니다"로 사용하는 대신 null을 실제로 (/ 원래) "요소가 있는지 모르겠습니다"로 해석해야 할 때 빈 집합을 사용하여 표시합니다. 세트에 요소가 없다는 것을 알고 있습니다. null 검사를 자주 수행 할 필요가 없기 때문에 더 건조 해집니다.
Jons 제안에 대한 후속 조치로 편집 하면 위 코드를 다음과 같이 변경하는 확장 메서드를 만들 수도 있습니다.
foreach(var header in file.Headers.OrEmptyIfNull()){
}
getter를 변경할 수없는 경우에는 오퍼레이션에 이름 (OrEmptyIfNull)을 부여하여 의도를보다 명확하게 표현하므로 제가 선호하는 방법입니다.
위에서 언급 한 확장 방법은 옵티마이 저가 감지 할 수없는 특정 최적화를 만들 수 있습니다. 특히 메서드 오버로딩을 사용하여 IList와 관련된 항목을 제거 할 수 있습니다.
public static IList<T> OrEmptyIfNull<T>(this IList<T> source)
{
return source ?? Array.Empty<T>();
}