null 許容型の System.Nullable<T>
を比較演算子や Equals
メソッドで比較すると、どのような結果になるのか調べてみた。
スポンサーリンク
Equalsメソッド
Equals
メソッドは、2つのオブジェクトが一致するかを判定するメソッドです。
では、int?
などの null 許容型でも、int
, DateTime
などの値型と同じように Equals
メソッドが使えるのであろうか?null 許容型の変数に対し、様々なパターンで Equals
メソッドを呼び出した結果は次の通りです。
null 同士の比較
2つの変数に共に null が格納された int?
型の変数に対して Equals
メソッドを呼ぶと、想定通り true
となる。
int? a = null;
int? b = null;
Console.WriteLine(a.Equals(b)); // -> True
これは Object#Equals
メソッドを使った比較でも、同じ結果が得られる。
int? a = null;
int? b = null;
Console.WriteLine(Object.Equals(a, b)); // -> True
null と 非 null の比較
null と null 以外の値が格納された変数の比較は、当然のことながら結果は False
となる。
int? a = 1;
int? b = null;
Console.WriteLine(a.Equals(b)); // -> False
null 許容型と通常の値型の比較
2つの変数の一方が null 許容型で、もう一方が通常の値型の場合の比較も、値が同じであれば想定通り一致の判定をしてくれる。
int? a = 1; //通常の値型
int b = 1; //null許容方
Console.WriteLine(a.Equals(b)); // -> True
Object#Equals
メソッドを使った比較でも、同じ結果が得られる。
int a = 1; //通常の値型
int? b = 1; //null許容方
Console.WriteLine(Object.Equals(a, b)); // -> True
もちろん DateTime のような値型でOK
ここまで int
型の null 許容型で説明してきましたが、DateTime
型の null 許容型でも Equals
メソッドは想定通りに比較してくれます。
DateTime? a = null;
DateTime? b = null;
Console.WriteLine(a.Equals(b)); // -> True
a = DateTime.Now.Date;
b = DateTime.Now.Date.AddDays(1);
Console.WriteLine(a.Equals(b)); // -> False
a = DateTime.Now.Date;
b = DateTime.Now.Date;
Console.WriteLine(a.Equals(b)); // -> True
スポンサーリンク
比較演算子の場合
お次は ==
!=
>=
<=
などの比較演算子で null 許容型の値を比較した場合について検証した。
null 同士の比較
2つの変数に共に null が格納された int?
型の変数に対して、 ==
!=
>=
<=
の4つの比較演算子で比較した結果が次の内容だ。おおむね想定通りの結果であろう。
int? a = null;
int? b = null;
Console.WriteLine(a == b); // -> True
Console.WriteLine(a != b); // -> False
Console.WriteLine(a >= b); // -> False
Console.WriteLine(a <= b); // -> False
null と 非 null の比較
null と null 以外の値が格納された変数の比較は次のとおりです。こちらもおおむね想定通りの結果であろう。
int? a = 1;
int? b = null;
Console.WriteLine(a == b); // -> False
Console.WriteLine(a != b); // -> True
Console.WriteLine(a >= b); // -> False
Console.WriteLine(a <= b); // -> False
null 許容型と通常の値型の比較
Equals
メソッドの時と同様に、2つの変数の一方が null 許容型で、もう一方が通常の値型の場合の比較も、想定通りの判定をしてくれる。
int a = 1;
int? b = 2;
Console.WriteLine(a == b); // -> False
Console.WriteLine(a != b); // -> True
Console.WriteLine(a >= b); // -> False
Console.WriteLine(a <= b); // -> True
まとめ
null 許容型の System.Nullable<T>
を比較演算子や Equals
メソッドで比較した時の結果について検証してきました。
ここまでの結果をまとめると null 許容型の比較は次のようになります。
null
とnull
の比較は「一致」null
とnull
以外の比較は「不一致」null
以外同士の比較は値が同じであれば「一致」
0 件のコメント:
コメントを投稿