我有幾個用戶控件,訂閱了另一個類中的事件處理程序。 我正在學習CodeContracts在C#中,我不知道,爲什麼靜態分析儀可以這樣寫代碼:爲什麼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擲或別的東西)
您是否啓用了「隱式空合約」? – CodesInChaos