2012-06-27 3 views
3

Contracts for .NET이이 코드에 대해 불평하지 않는 이유는 무엇입니까?코드 계약은 null 조건을 확인하지 않습니다. 왜?

private static User GetUser() 
{ 
    var sFirstName = Console.ReadLine(); 
    var sLastName = Console.ReadLine(); 
    if (sLastName == "NULL") 
    { 
     return null; 
    } 
    else 
    { 
     return new User(sLastName, sFirstName); 
    } 
} 
public static int Main(string[] args) 
{ 
     var oUser = GetUser(); 
     DisplayUser(oUser); 
     Console.ReadLine(); 
     return 0; 
} 
private static void DisplayUser(User user) 
{ 
    Contract.Requires(user != null); 
    Console.WriteLine(user.ToString()); 
} 

GetUser는 null을 반환 할 수 있지만 계약서에서는 DisplayUser로 전달하기 전에 반환 값을 확인해야한다고 말하지 않습니다. 왜?


자동 응답 : 코드에 경고 레벨 설정을 계약 수 있습니다. 나는 그것을 낮추라고 말해야했다.

+0

아마도 null이 아니기 때문일 수 있습니다. 대신 if (sLastName.IsNullOrEmpty())를 확인해보십시오. –

+0

@ 0A0D - 'NULL'문자열을 입력하면 'null'반환 값을 얻게됩니다. –

+0

@HansKesting : 아, 그리워. –

답변

2

this msdn 페이지에 따르면 Visual Studio에 적절한 플러그인이 설치되어 있지 않으면 계약이 적용되지 않습니다. 해당 플러그인을 설치 했습니까?

계약을 시행하려면 Visual Studio 추가 기능을 설치해야합니다. 코드 계약 프리미엄 에디션 애드 인을 사용하면 프로젝트 등록 정보 페이지에서 코드 계약의 정적 및 런타임 확인을 지정할 수 있습니다. 이 런타임 검사를 활성화하지 않으면 Contract.Ensures 메서드와 같은 계약은 위반 인 경우 런타임 동안 예외를 throw하지 않습니다. Visual Studio 추가 기능은 Visual Studio 2010 또는 Windows SDK와 함께 제공되지 않습니다.

+0

나는 그것을 설치했다. 나는 "정적 계약 점검 수행"체크 박스를 체크합니다. GetUser를 으로 바꾼 경우 개인 정적 사용자 GetUser() { return null; } 계약서에 불만이 제기됩니다. – user1485585

관련 문제