C#_型の前に ? がある ( null 許容型 )

int? hoga; と、宣言された型の前に ? ( クエスチョン ) があるコード。

 

int? hoga とは

null 許容型といい、
値型の型名の後ろに ? をつけることで null 値を格納できるようになる。

値型限定。参照型には付けられない。
値型 ( int や char 、bool など ) は、null を取れない。
だが、データベースなど一部のアプリケーションでは
null を取るような型が欲しい時がある。
故に null 許容型 という特殊な値が用意された。

 

hoga.HasValue と hoga.Value とは

T ? は コンパイル結果的には Nullable<T> 構造体と等価。

下記の変数 x と y は同じ型。

int? x;
Nullable<int> y;

 

Nullable<T> 構造体は 2 つのプロパティを持っている。

返す型 名前 説明
bool HasValue 有効な値 ( 非 null ) なら true
null なら false を返す。
T Value 有効な値を返す
HasValue が false (値が null ) なら例外を投げる

メンバ       :クラスの中で定義される変数やメソッドのこと。
フィールド:メンバ変数のこと。データ。
メソッド    :処理のこと。
プロパティ:フィールドの値を取得・設定する為の手段。setter・getter。 

 

hoga ?? x

演算子 ??null 合体演算子と呼ばれている。

hoga が null ならば x を返し
hoga が 非 null ならば hoga を返す

下記は 2 つとも同じ意味のコード。

int z = hoga ?? 5;
int w = hoga != null ? hoga : 5;

 

 

こちらから。
http://ufcpp.net/study/csharp/sp2_nullable.html
https://qiita.com/toshi0607/items/801a0d37fb48313cbdbd
http://www.kisoplus.com/kihon/acc.html

 

以上。