1

2つのnull許容日付に違いがあるかどうかを判断しようとしています。. これよりもエレガントな方法はありますか:

  if (newDate.HasValue && (!oldDate.HasValue ||  (oldDate.HasValue && oldDate.Value.Date != mewDate.Value.Date)))
4

1 に答える 1

1

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 の結果を生成します。

于 2013-09-02T21:22:51.277 に答える