我有几个用户控件,订阅了另一个类中的事件处理程序。 我正在学习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