문제

나는 Null에 대한 나의 모든 주장을 확인하고 Argumenutnullexections를 던질 때 매우 피곤합니다.

내가 이해 한 바와 같이 C# 4.0은 계약 구성에 따라 일부 설계를 가능하게합니다. 메소드가 C# 4.0에서 널 인수를 허용하지 않도록 지정할 수 있습니까?

또한, 그 동안 널 확인하고 던지는이 단조로운 작업을 피하기 위해 내가 할 수있는 일이 있습니까?

도움이 되었습니까?

해결책

당신은 a를 만들 수 있습니다 NotNull<T> 도움이되는 일반적인 클래스이지만 부작용이 있습니다. 보다 Robert Nystrom의 블로그 게시물.

다른 팁

Rick Brewster는이 게시물에서 간결하고 선언적 인 스타일 매개 변수 확인을위한 좋은 솔루션을 설명합니다.

http://blog.getpaint.net/2008/12/06/a-fluent-spoach-to-c-parameter-validation/

반사의 사용 (DBC의 단점)을 피하고 비 법적 코드 경로에 대한 오버 헤드를 생성하지 않습니다.

그가 확장 방법을 사용하여 인스턴스 메소드로 보이는 것을 허용하는 방법과 마찬가지로 NULL 객체에서 호출합니다. 매우 영리한 코딩 IMO.

DBC, Google Spec# 및 PostSharp에서 판매되는 경우

C# 4.0의 기본 DBC 구조에 대해서는 확실하지 않지만 Microsoft는 교차 언어를 출시 할 예정입니다. 계약 도서관.
MSVS2008 용 버전을 다운로드 할 수 있습니다 여기.

이미 주어진 답변에 대한 대안으로 Null Object design pattern.

이 디자인 패턴의 본질은 일단 "널 객체"가 생성되면 널 검사를 수행 할 필요가 없으며 NULL 객체의 방법이 널 (그렇지 않으면)이 전달 될 때마다 원하는 동작을 구현할 필요가 없다는 것입니다. "실제 대상"에 대한 참조.

이 설계 패턴은 C# 4.0에 의존하지 않으며 실제로 거의 모든 OO 프로그래밍 언어로 쉽게 구현할 수 있습니다..

방금 코드 계약을 사용하기 시작했습니다. C# 4.0의 새로운 기능을 시작했습니다. 프로젝트 설정에서 볼 수 있도록 MS에서 Addin을 다운로드해야합니다. 자세한 내용은 ->http://research.microsoft.com/en-us/projects/contracts/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top