C#でコードを作成していく上で変数に緑波線(警告表示)が表示されて[null 参照代入の可能性があります]や[null 参照の可能性があるものの逆参照です]が表示されてしまう場合の対処法について備忘録的に投稿しています。
null 参照の可能性があるものの逆参照です
C#でコードを書いていく時に、変数を定義したり定義した場合や変数を参照する際に警告(緑波線)表示されます。
警告なので、コンパイルもビルドも可能なので実害はないのですがコードを後から見直す時の気持ちの問題。
原因は「変数にNULLが渡された時に意図しない動作があるかもしれません」という変数の厳格性。
流石に配布したり、販売するアプリの場合は対処が必要かもしれませんが、自分で使うだけの場合は、許容範囲の反中です。
それでもコードを眺めている時に気になる場合の対処法を紹介します。
IF文でnullチェック
実際の対処法でも用いますが、変数がNULLの場合の条件分岐を追加して警告表示を回避できます。
例えば、こんな感じ。
Dictionary<string, string>? dict = JsonSerializer.Deserialize<Dictionary<string, string>>(data);
foreach (string key in dict.Keys)
{
//処理
}
foreachの変数参照時に警告表示になるので、変数チェックをする。
Dictionary<string, string>? dict = JsonSerializer.Deserialize<Dictionary<string, string>>(data);
if(dict != null)
foreach (string key in dict.Keys)
{
//処理
}
}
参照時にはnullの可能性が無くなるので警告は無くなります。
#pragma warning で狙い撃ち
#pragma でコンパイラに特定の警告を無効化できます。
例えば、こんな感じ。
Dictionary<string, string>? dict = JsonSerializer.Deserialize<Dictionary<string, string>>(data);
#pragma warning disable CS8602
foreach (string key in dict.Keys)
{
//処理
}
#pragma warning restore CS8602
IF文で条件分岐をしないで、特定の警告を無効化できます。
#nullable で範囲攻撃
#nullable でコンパイラに、null関連の警告を無効化できます。
例えば、こんな感じ。
Dictionary<string, string>? dict = JsonSerializer.Deserialize<Dictionary<string, string>>(data);
#nullable disable
foreach (string key in dict.Keys)
{
//処理
}
#nullable enable
特定の警告を指定せずに、無効化できます。
警告表示ですが、実際に変数にNULLが設定された場合に対処が必要な場合もあるので配布や販売するアプリの場合はIF文などで想定したコードが必要になります。
しかし、個人で利用するだけのアプリのような場合には#pragma 文などでコンパイラに無視させる対処も考えられます。
まとめ
今回は短い記事ですが、Visual StudioのC#で変数に緑波線(警告表示)が表示されて[null 参照代入の可能性があります]や[null 参照の可能性があるものの逆参照です]が表示されてしまう場合の対処法について書きました。
実際には変数にNULLが設定された場合の挙動をIF文などで想定する必要がありますが、特に想定が必要ない場合には #pragma 文などで警告を無視させることが可能です。
C#でnull参照に関する警告表示が気になる人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。