C#で関数やプロシージャを呼び出す際に、警告メッセージ[参照型のNULL値の許容が、ターゲットデリゲートと一致しません。おそらく、NULL値の許容の属性が原因です]が表示される場合の対処法について備忘録的に投稿します。
自作関数の呼び出し時に表示される
例えば、こんな感じ。コントロールに追加したマウスのイベントハンドラーを呼び出す際に、警告が表示されます。別にこのままでもコンパイルとビルドは出来ますが、波線が気になります。
要するに、引数としてNULLが許容されているか否かを事前に確認してくれています。
詳しい内容に興味のある方は公式ページの「C# コンパイラによって解釈される null 状態のスタティック分析の属性」をご覧ください。
追加した関数の引数は次のような定義をしていました。
private void mainImage_MouseWheel(object sender, MouseEventArgs e)
よくあるイベントハンドラーの形ですが、このままだと引数 sender の部分がNULLを許容しない形になっているために、警告が表示されるようです。
公式ページの解説通りに、引数の定義を次の様に修正します。
private void mainImage_MouseWheel(object? sender, MouseEventArgs e)
変数の型名に “?” を追加すると「null 許容参照型」となり、NULLが引き渡される想定でコンパイラーに伝わります。
イベントハンドラーの引数 sender の変数型を「null 許容参照型」に修正すると、警告表示が無くなります。
まとめ
C#で関数やプロシージャを呼び出す際に、警告メッセージ「NULL値の許容の属性が原因です」が表示されて、コードに波線が追加されるのは、呼び出し先の関数やプロシージャの引数が「null 許容参照型」になっていないことが原因です。
変数の型宣言を「null 許容参照型」に変更することで対処ができます。
警告メッセージ[参照型のNULL値の許容が、ターゲットデリゲートと一致しません。おそらく、NULL値の許容の属性が原因です]と表示されて困っている方の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。