1. ホーム
  2. c#

[解決済み] Deep null チェック、もっといい方法はないのか?

2022-07-02 23:39:35

質問

注意 この質問は .? 演算子がC# 6 / Visual Studio 2015で .

ケーキ.フロスティング.ベリー.ローダーのような深いプロパティがあり、それがヌルであるかどうかをチェックする必要があるので、例外が発生しないことは誰もが経験することです。これを行う方法は、短絡的な if 文を使用することです。

if (cake != null && cake.frosting != null && cake.frosting.berries != null) ...

これは必ずしもエレガントではなく、チェーン全体をチェックし、NULL変数/プロパティに突き当たるかどうかを確認する、おそらくより簡単な方法があるはずです。

何らかの拡張メソッドを使用して可能なのでしょうか、それとも言語機能でしょうか、それとも単に悪い考えなのでしょうか。

どのように解決するのですか?

私たちは、あなたが望むセマンティクスを持つ新しい操作 "?." を言語に追加することを検討しました。(そして、それは現在追加されています。以下を参照してください。) つまり、あなたは次のように言うでしょう。

cake?.frosting?.berries?.loader

というようにすれば、コンパイラがすべての短絡チェックを生成してくれるでしょう。

これは C# 4 のためのバーにはなりませんでした。おそらく、仮想的な将来のバージョンの言語のためのものでしょう。

更新(2014年)。 ?. 演算子は、現在 予定 を次のRoslynコンパイラのリリースで使う予定です。演算子の正確な構文解析と意味解析については、まだ議論があることに注意してください。

更新(2015年7月)しました。 Visual Studio 2015 がリリースされ、C# コンパイラが同梱されるようになり、このコンパイラがサポートする null-conditional演算子 ?.?[] .