[C#6.0]Null条件演算子

例えば、実行ファイルのあるディレクトリを取得したい場合に以下のように書いたとします

var directoryPath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

そうすると、以下のように波線が表示され、 null 参照の可能性があるものの逆参照です。 という警告がでます

つまり、Assembly.GetEntryAssenbly()がnullを返す可能性があり、nullの時に .Location するとエラーになるという話です。

こういった場合に、Null条件演算子を記載しておくと、nullだった時その先のメソッドやプロパティを 実行せずにnullを返してくれエラーの回避をしてくれます

var directoryPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
↓
var directoryPath = Path.GetDirectoryName(null); // これと同等

※Path.GetDirectoryNameはnullを受け取った場合そのままnullを返してくれてエラーにはならないです

パスなのでnullを返されても・・・というのはあると思うので、Null合体演算子を使って空文字にしてしまうのでもよいですね

var directoryPath = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location) ?? "";

もうちょっと極端なケースをみるとその恩恵が強く感じられるのかもしれないのでそんな例を
たとえばあるクラスのメソッドをつなげて実行できる場合に、そのメソッドがnullを返す恐れがあると
それ以降のメソッドでエラーになるのでNull合体演算子を使うことになるのですが

var ret = new Hoge();
var val = ret.Foo()?.Bar()?.Baz();

これをNull合体演算子を使わないでかくと…
以下のようになり見づらくなってしまうって話しになります

var ret = new Hoge();
var val = ret.Foo();
if(val != null)
{
    val = val.Bar();
    if (val != null)
    {
        val = val.Baz();
    }
}
投稿日時: 2025-06-14 00:48:14

内部リンク

Comment

最近の投稿

最近のコメント

タグ

アーカイブ

その他