39

以下よりもnull許容日時を比較するためのより良い方法を探しています:

助言がありますか?

// myobject.ExpireDatetime is of DateTime?
//
if (!myobject.ExpireDateTime.IsNull() && DateTime.Compare((DateTime)myobject.ExpireDateTime, DateTime.Now.ToUniversalTime()) < 0)
{ //error! }    

編集:混乱して申し訳ありません...myobject.ExpireDatetimeのタイプはDateTimeです。

4

5 に答える 5

47

あなたの質問は私にはよくわかりませんが、

DateTime? ExpireDateTime;  // could be a variable or a property

言うだけでいい

if (ExpireDateTime < DateTime.UtcNow)
{
  ...
}

ExpireDateTimeこれはnull(HasValueが false) であれば問題ありません。一部の経験の浅い開発者は、持ち上げられた演算子を理解するのに苦労するため、より明確にするために、次のように記述できます。

if (ExpireDateTime < (DateTime?)DateTime.UtcNow)
{
  ...
}

同じですが、読みやすく理解しやすいです。

.Valueもちろん、nullable が null である可能性がある場合は決して書き込まないでください。そうすると、InvalidOperationException 「Nullable オブジェクトには値が必要です」というメッセージが表示されます。

于 2012-12-02T20:16:03.807 に答える
36

以下を使用することをお勧めします。

int y = Nullable.Compare<DateTime>(DateTime.UtcNow, x); 

// x is the nullable date time object.
// y will be '-1' if x is greater than DateTime.UtcNow
于 2015-08-31T05:41:26.300 に答える
4

の場合 ExpireDateTimeNullable<DateTime>代わりに次のことを行います。

if (ExpireDateTime.HasValue && ExpireDateTime < DateTime.Now.ToUniversalTime())
{ 
}
于 2012-12-02T19:53:57.817 に答える
1

Valuenullableのプロパティを使用します。

objet.ExpireDateTime.Value

if (!object.ExpireDateTime.IsNull() 
    && DateTime.Compare(objet.ExpireDateTime.Value, 
                        DateTime.Now.ToUniversalTime()) < 0)
{ 
}    
于 2012-12-02T19:51:54.583 に答える