2013-04-26 2 views
4

정적으로 정확한 사례를 처리하기 위해 resharper 코드 검사/주석을 확장 할 수 있습니까?ReSharper 코드 검사 추가

static public bool IsValid(double? d) 
    { 
     return d != null && IsValid(d.Value); 
    } 
    static public bool IsValid(double d) 
    { 
     return !Double.IsNaN(d) && !Double.IsInfinity(d); 
    } 

그래서이가 널 (NULL)에 값이 보장하고, 나는 "가능한 System.InvalidOperationException"검사를하지 싶습니다 예를 들어

, 내가 유틸리티 기능이 나는 등의 특정 조건을 만족 알고 이 실제로 값이 아닌 널 (NULL) 보장 것을 나타 내기 위해 정적 타이핑을 확장 나는 등 검사를/억제 할 수 물론

if (Utils.IsValid(nullableValue)) 
    { 
     DoSomethingWith(nullableValue.Value); 
    } 

하지만이 가능합니다 : 같은 뭔가를 발사?

(I는 관련 그러나 지나치게 일반적인 문제는 내가 대신 그것을 처리 할 수 ​​ReSharper에서의 또 다른 정적 형식 검사를 이용해야 겠지,하지만 지나치게 광범위한되는 두려움을 요구하지 않습니다!)

+1

직접 사용해 본 적은 없지만 [계약 주석 기능] (http://blogs.jetbrains.com/dotnet/2012/08/contract-annotations-in-resharper-7/)을 사용해보십시오. –

+0

매우 유망 해 보인다! 올바른 주석이 무엇인지 살펴 보려면 지금 살펴보십시오. 매우 감사! – Gene

+0

이것은 일반적으로 매우 유용합니다. 나는 그것들을 확실히 사용 하겠지만, 전달 된 값에 대한 제약 조건을 확인하는 방법을 보지 못합니다. (즉, 입력 및 출력 제약 조건을 확인하지만 주어진 반환 값에서 전달 된 매개 변수에 대해 어떤 것이 사실임을 표현하는 방법은 없습니다. – Gene

답변

4

당 다니엘의 Resharper는 검사를 돕기 위해 많은 annotations을 지원합니다. documentation를 통해 특히

은, 우리가 여기에서 찾고있는 것은 같은 것입니다 : 완벽 트릭을 수행

[ContractAnnotation("d:null => false")] 
    static public bool IsValid(double? d) 
    { 
     return d != null && IsValid(d.Value); 
    } 

및 정적 검사 아름답게 작동합니다.

그 resharper을 사랑해!