gpt4 book ai didi

c# - 为什么 CodeContracts 静态分析器不发出警告?

转载 作者:行者123 更新时间:2023-11-30 17:15:07 26 4
gpt4 key购买 nike

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

还是我对契约(Contract)的理解有误?我怎样才能收到此类错误的通知?

更新:

是的,我确实按照答案中的建议启用了 Implicit Non-Null Obligation,但我仍然没有收到静态分析器的警告。我还尝试使用 Microsoft All Rules 规则集运行代码分析,也没有警告。 (但我更喜欢处理代码契约并使用 Contract 类执行一些额外的检查,而不是使用 if-then-throw 或其他东西)

最佳答案

您应该在静态分析器选项(项目选项|代码分析)中启用“隐式非空义务”。

关于c# - 为什么 CodeContracts 静态分析器不发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8187360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com