single.php

C#で[CS8622:おそらく、NULL値の許容の属性が原因です]と警告が出る場合の対処法

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値の許容の属性が原因です]と表示されて困っている方の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です