2016-07-25 8 views
3

"아마도 null 참조에 메소드를 호출"C# 코드 계약 내가 코드 계약을 조사하고 있는데 나는이 같은 빌더 패턴을 구현하고있어

Possibly calling a method on a null reference. Do you expect that NWP.PointServices.Domain.Model.People.PersonCaution+Builder.WithCautionType(System.String) returns non-null?

:이 오류와 함께

if (row != null) 
{ 
    var builder = new PersonCaution.Builder() 
     .WithCautionType((string)row.Element("PersonCaution__Type1G")) 
     .WithRemarks((string)row.Element("PersonCaution__Remarks")); 

    if (builder != null) 
    { 
     personCautions.Add(builder.Build()); 
    } 
} 

그러나, 코드 계약 정적 검사가 실패 빌더 클래스를 사용

Q. Contract.Ensures 사후 조건이 정적 검사기를 만족시킬 것이라고 생각했지만 그렇지 않습니다. 오류를 제거하려면 어떻게해야합니까? 대단히 고마워.

참고. Builder 클래스가 호출하는 코드와 별도의 프로젝트에있는 경우에만 문제점을 볼 수 있습니다.

상세 정보 :

  • 비주얼 스튜디오 프로페셔널 2015 14.0.25424.00 업데이트 3 개
  • 모든 프로젝트는 닷넷을 비주얼 스튜디오 확장을 통해 설치 4.6.1
  • 코드 계약을 대상 V 1.8
  • 프로젝트의 다른 (작성자가 아닌) 영역에서 코드 계약을 성공적으로 사용하고 있습니다.
+0

글쎄, 나는 업데이트 3과 코드 계약서에 있지 않다. 단지 모든 것을 확인했지만 또한 (빌더! = null) 평가가 중복된다는 경고를주었습니다. 빌더가 항상 null이 아니기 때문입니다. 나는 이것에 관해 당신을 도울 수 없다고 생각합니다. –

+0

@ Sergey.quixoticaxis.Ivanov - 감사합니다. Builder 클래스가 호출하는 코드와 별도의 프로젝트에있는 경우에만이 문제점을 볼 수 있다는 위의 노트를 추가했습니다. 코드 계약 설정은 각 프로젝트마다 동일합니다. – Howard

+0

안녕하세요. 나는 빌더 클래스를 다른 dll로 옮겼고 나에게도 여전히 잘 작동한다. -/ 빌더 클래스의 정의로 어셈블리에 대한 Contract Reference Assembly = Build를 사용 했는가? –

답변

1

("Contract Reference Assembly"= "Build")

+0

감사합니다. 그러나 오류는 남아 있습니다. – Howard

+0

정말 이상합니다. 코드를 예제 콘솔 프로젝트에 붙여 넣으면 CC가 경고를 보내지 않습니다. CC의 최신 업데이트로 VS2015 커뮤니티를 사용했습니다. –

+0

편집을하고 추가 정보를 추가했습니다. – Howard