朝会発表テーマ

C#のNull条件演算子について

1.Null条件演算子

C#6.0から使用可能。
演算子の表記は「?.」
この「?.」の前にくる値がnullの場合はnull、そうでない場合は「?.」の後ろの処理を実行する。

2.使用例

object型の値を文字列に変更する場合などに、object.ToString()としたいが、
objectがnullの場合、エラーが発生する。
旧バージョンでは
例1

if(object == null)
{
    str = null;
}
else
{
    str = object.ToString();
}

または
例2

str = obj == null ? null : obj.ToString();

のような記述が必要だったが、
例3

str = obj?.ToString();

のような記述でobjectがnullの時はnull、
nullでない場合objectを文字列にした値を返すことができるようになった。
Listの項目に対してNull条件演算子を使用する場合、
例4

str = obj?[x].ToString();

のようにして使用する。

Null条件演算子では、nullの場合に返す値は必ずnullなので、
nullの時に文字列で”NULL”と返すなどはできない。
※例1や例2では可能。
例5

str = obj ?? "NULL";

この方法でも例1、例2と同じようにnullの場合に任意の値を返すことが可能。
??の左側がnullでない場合、??の左側の値を返し、??の左側がnullの時、??の右の値を返す。

例3と例5をあわせることで、メソッドを持つクラスがnullになる可能性がある時のif文を
簡単に書いたりすることができる。
例6

if(chkClass?.chk() ?? false)
{
    return;
}

値を返さないパターンでは、
例7

obj?.Dispose();

のようにすると、objがnullでない場合にのみDispose()を実行させるなど、
通常nullチェックが必要な処理に対し、nullチェックを省略することができる。

コメント