別のクラスのイベント ハンドラーにサブスクライブされているユーザー コントロールがいくつかあります。私は C# で CodeContracts を学んでいますが、Static Analyzer で次のようなコードを記述できるのはなぜでしょうか。
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
}
ここには、null 参照例外につながる可能性がある、安全でない可能性のあるコードがあります。静的アナライザーはおそらくチェックできないことを理解しています。実際の型は何でしょsender
う。しかし、それを証明できない場合に備えて、CodeContracts: Possibly calling a method on a null reference
.
それとも、契約の考え方が間違っているのでしょうか? このようなエラーの通知を受け取るにはどうすればよいですか?
更新:
はい、Implicit Non-Null Obligation
回答で提案されているように有効にしましたが、それでも静的アナライザーから警告が表示されません。また、ルールを設定してコード分析を実行しようとしましたがMicrosoft All Rules
、警告もありませんでした。(ただし、if-then-throw などを使用するよりも、Code Contracts を処理し、Contract クラスを使用して追加のチェックを実行することをお勧めします)