Action을 public 필드로 설정하는 대신 속성으로 만들거나 메서드에 전달하십시오. 그 시점에서 널 검사를 할 수 있습니다. 나는 또한 당신이 그것을 설정 한 후이를 검색 할 필요가 있다고 의심, 그래서 다음 중 하나를
_displayError = (s) => { throw new ArgumentNullException("Please tell me what to do with this exception!"); };
public Action<string> DisplayError
{
set
{
if (value == null) { throw new ArgumentNullException("I need this!"); }
_displayError = value;
}
}
public void MyMethod()
{
_displayError("ERROR");
}
또는 :
public void MyMethod(Action<string> displayError)
{
if (displayError == null) { throw new ArgumentNullException("I need this!"); }
displayError("ERROR");
}
하여 소비자의 코드를 변경 할 필요가 없습니다이 중 첫 번째.
물론 코드를 사용하는 팀원과 함께 작업하는 경우 은 null 체크를 전혀하지 않아도됩니다.. 당신의 코드를 잘못 사용하고있는 사람을 찾아서 오해가있는 곳에서 우호적 인 대화를 나누십시오. 방어 프로그래밍은 회원들이 서로를 신뢰하는 팀을 대체 할 수있는 좋은 대안이 아니며, 널 검사는 명확하고 정의 된 인터페이스를 사용하는 것만 큼 효과적이지 못합니다.
당신은이 개 테스트가 필요합니다
내 클래스 :
- 은 소비자가 오류를
- 나는 어떤 이유에서 오류가 발생거야 감안할 때 (세트를 처리 할 수 있도록해야 context here)
- 오류가 발생하면 (오류 처리기에서 변수를 설정하도록)
- 그러면 처리기에 오류를 제공해야합니다 오류 처리기가 연결되어 있는지 확인해야합니다
- (설정있어 변수를 확인)
- 내가
- 때 소비자 (는 무관 때문에 당신이 여기에 좋아하는 것을 코딩 할 수 있습니다) 오류가 발생 할 수 감안할 때
- 그런 다음 내가 바로 그렇게하지 않는 소비자를 요청해야 오류 처리기 (null 오류 핸들러 메서드 호출)없이 저를 호출
,369 (예외 확인)
가능하면 null을 전달/반환하지 마십시오. 이 경우 DisplayError를 호출 할 때 아무 것도 수행하지 않는 No-Op 액션을 기본값으로 설정할 수 있습니다. 증상과 같은 깨진 창으로, 첫 번째 null-check은 null-checks가 모든 곳에서 버섯을 만들기 시작하도록합니다. Null 참조 예외는 무언가 잘못되어 라이브러리를 사용하는 방법에 대한 디자인 또는 인식 개선을 통해 즉시 수정되어야 함을 의미합니다. – Gishu