다른 클래스의 이벤트 처리기에 가입 한 여러 사용자 컨트롤이 있습니다. 왜 정적 분석기는 다음과 같이 코드를 작성 허용 않습니다 나는 C#에서 CodeContracts을 배우고, 나는 궁금 : 여기왜 CodeContracts 정적 분석기가 경고를 표시하지 않습니까?
void MyUserControl_MouseEnter(object sender, MouseEventArgs e)
{
MyUserControl item = sender as MyUserControl;
item.DoSomething(); // I expect some warning here, because item can be null
sender.Equals(testObject); // This doesn't yield warning either
}
내가 널 참조 예외로 이어질 수있는, 잠재적으로 안전하지 않은 코드가 있습니다. 정적 분석기가 실제로 확인할 수없는 사실을 알고 있습니다. sender
의 실제 유형은 무엇입니까? 그러나 증명할 수없는 경우에는 CodeContracts: Possibly calling a method on a null reference
과 같은 경고 메시지가 표시됩니다.
계약서에 대한 잘못된 생각이 들지 않습니까? 이런 오류를 어떻게 알릴 수 있습니까?
UPD :
예, 그것은 답변에서 제안 된대로 내가 Implicit Non-Null Obligation
수 있도록 않았다,하지만 난 여전히 정적 분석기에서 경고를하지 않습니다. 또한 Microsoft All Rules
규칙을 설정하여 코드 분석을 실행하려고했으나 경고도 표시하지 않았습니다. (하지만 코드 계약을 선호하고 if-then-throw 또는 다른 것을 사용하는 대신 Contract 클래스를 사용하여 몇 가지 추가 검사를 수행합니다.)
"암시 적 null 계약"을 활성화 했습니까? – CodesInChaos