3

DateTimeを読み返していますか?私の見解からの価値。今度は、NextUpdate DateTimeがチェックされていますか? HasValue、そうであればその時間をUTCに変換してください。null可能なDateTimeをUTCにキャストする方法DateTime

null coalescing operatorを使用する必要があるようですが、その演算子を使用する場合、System.NUllableにToUniversalTime()の定義が含まれていないことがわかります。

私はSOに同様の質問をしましたが、それは不運です。

質問:私はUTCにヌルDateTime値を変換するにはどうすればよい

コード:

DateTime?値を持っている、とそうUTCにそのDateTieを変換する場合 -

  if (escalation.NextUpdate.HasValue) 
      { 
       escalation.NextUpdate = escalation.NextUpdate ?? escalation.NextUpdate.ToUniversalTime(); 
      } 
      else 
      { 
       escalation.NextUpdate = null; 
      } 

モデルでマイNextUpdateプロパティ:

public DateTime? NextUpdate { get; set; } 
+0

「escalation.NextUpdate?.ToUniversalTime()」を意味するのでしょうか? –

+3

'' escalation.NextUpdate.ToUniversalTime() ''を '' escalation.NextUpdate.Valueに変更します。ToUniversalTime() '' –

+0

@EhsanSajjad上記が働いています:) –

答えて

6

あなたのコードは、複数の方法で間違っています。それは、そうでない場合は右側nullでないある場合

??オペレータは、左側を返します。
すでにescalation.NextUpdate.HasValuetrueであることを確認したので、左側はnullではなく、同じ日付を再度割り当てます(UTCに変換せずに)。

Nullable<DateTime>ToUniversalTime()を宣言していない場合は、その値で行う必要があります。

だから、最終的なコードは次のようになります。それはとにかくnullになり、その場合のように

if (escalation.NextUpdate.HasValue) 
    escalation.NextUpdate = escalation.NextUpdate.Value.ToUniversalTime(); 

またはC#6

escalation.NextUpdate = escalation.NextUpdate?.ToUniversalTime(); 

elseブランチのための必要はありません。

+0

はエスカレーションしないでください。 NextUpdate?.Value.ToUniversalTime() ''? –

+0

@ EhsanSajjad私は最初もそう思っていました。しかし、驚いたことに、これはうまく動作します。 –

+0

@EhsanSajjadそれは良い質問ですが、?演算子は自動的にvalueプロパティ – MikeT

3

あなたは、その非常に単純なC#6を使用している場合は

escalation.NextUpdate?.ToUniversalTime(); 

これは、あたかもNextUpdateがnullでないかのように変換します。ToUniversalTime()else return null

if yoおそらくあなたの最善の策である場合uがあなたがNULL可能のValueプロパティを逃したとの使用を修正しましたむき出しならば、これは基本的にあなたの完全なと同じである

escalation.NextUpdate.HasValue ? (DateTime?)escalation.NextUpdate.Value.ToUniversalTime():null; 

インラインその後、#6〜Cを使用することはできません??オペレータ

関連する問題