2つのnull許容日付に違いがあるかどうかを判断しようとしています。. これよりもエレガントな方法はありますか:
if (newDate.HasValue && (!oldDate.HasValue || (oldDate.HasValue && oldDate.Value.Date != mewDate.Value.Date)))
C# コンパイラは、論理演算子 like ==
and !=
over nullalbe を自動的にリフトするため、通常は をチェックする代わりに直接比較できますHasValue
。この場合、null でない!=
ことを確認したら、比較することができます。newDate
if(newDate.HasValue && newDate != oldDate)
仕様書には次のように記載されています。
7.3.7 リフト演算子
リフト演算子を使用すると、null 非許容値型を操作する定義済みおよびユーザー定義の演算子を、それらの型の null 許容形式でも使用できます。
等価演算子 == != の場合、オペランドの型が両方とも null 非許容値型であり、結果の型が bool である場合、演算子のリフトされた形式が存在します。リフトされた形式は、単一の ? を追加することによって構築されます。各オペランド タイプへの修飾子。持ち上げられた演算子は、2 つの null 値が等しいと見なし、null 値は null 以外の値と等しくないと見なします。両方のオペランドが null でない場合、持ち上げられた演算子はオペランドをアンラップし、基礎となる演算子を適用して bool の結果を生成します。