null判定演算子をザックリまとめ
【目次】
1. null許容値型:ex. int? string?など
2. if文: if (条件式) { Trueの場合… } else { Falseの場合… }
3. 三項条件演算子: ?:
4. null合体演算子: ??
5. null合体代入演算子: ??=
6. null条件演算子: ?.
7. 環境
以下、2〜5はすべて同じ結果を出力する。
1. null許容値型
まず、null許容値型をint型を例に説明します。
int型の範囲は、「-2,147,483,648 ~ 2,147,483,647」です。
ですから、int型には、0(ゼロ)は含まれますが、null値はありません。
C#では、null、””(空文)、0(ゼロ)は別のものと考えます。
そこで、C#がnullも値として持てるnull許容値型を用意しました。
int型のnull許容型は、int?と表記します。
int?は、int型 + null という値を持てる型ということになります。
string?の場合は、string型 + nullという値を持てる型ということになります。
2. if文
以下の文章をif文で記述すると…
「strの値は、文字列、またはnullです」
「…」
「もしstrが、nullならば、strには””(空文)を代入する」
「そうでなければ、strの文字列をそのまま使用する」
string? str;
....
if (str == null)
{
str = "";
}
else
{
// strの値をそのまま使う
}
3. 三項条件演算子
2のif文を、?:三項条件演算子で簡略化すると…
str = str != null ? str : "";
4. null合体演算子
3をさらにnull合体演算子で簡略化すると…
str = str ?? "";
ただし、この演算子は条件式が、null判定の場合に限って使用できる演算子です。
5. null合体代入演算子
4をさらにnull合体代入演算子を使って簡略化すると…
str ??= "";
ただし、この演算子も、4と同様に条件式がnull判定の場合に限って使用できる演算子です
6. null条件演算子
まずは、以下の文章をif文で記述すると…
「sampleGamaObjectは、GameObjectです」
「strは、string型のnull許容値型です」
「…」
「ゲームオブジェクトがnullならば、strの値はnullにする」
「そうでなければ、strはゲームオブジェクトの名前を代入する」
GameObject sampleGameObject;
string? str;
.....
if (sampleGameObject == null)
{
str = null;
}
else
{
str = sampleGameObject.name;
}
以下は上記のif文の内容を、null条件演算子で記述したもの
string? str = sampleGameObject?.name;
さらに、sampleGameObujectは見つかったが、そのオブジェクトが名前を持っていなかったケースでは、strの値に”NoName”を代入するには、??(null合体演算子)を使って以下のコードになる。
string? str = sampleGameObject?.name ?? ”NoName";
7. 環境
null許容値型 型? C#2.0以上
null条件演算子 ?. C#6.0以上
null合体演算子 ?? C#8.0以上