2017-10-17 16 views
1

私はDateTimeにオブジェクトの単純なキャストを行っています。オブジェクトはDateTimeでもあります。ただし、ボックス化されていない値はオブジェクトと同じではありません。DateTimeがアンボックスされていないのはなぜですか?

私はSystem.Convert.ToDateTime(value)でも試したことがありますが、違いはありません。

私はここで何が起こっているのですか?

private object Convert(object value, DateTimeConversionTypes dateTimeConversionTypes) 
{ 
    switch (dateTimeConversionTypes) 
    { 
     case DateTimeConversionTypes.ToLocal: 
     { 
      if (!(value is DateTimeOffset)) return null; 
      var dtValue = (DateTimeOffset)value; 
      if (dtValue == DateTimeOffset.MinValue) return null; 
      var returnValue = dtValue.ToLocalTime().DateTime; 
      returnValue = DateTime.SpecifyKind(returnValue, DateTimeKind.Local); 
      return returnValue; 
     } 
     case DateTimeConversionTypes.ToUtc: 
     { 
      if (!(value is DateTime)) return null; 
      var dtValue = (DateTime)value; 
      if (dtValue == DateTime.MinValue) return null; 
      var returnValue = dtValue.ToUniversalTime(); 
      returnValue = DateTime.SpecifyKind(returnValue, DateTimeKind.Utc); 
      return new DateTimeOffset(returnValue); 
     } 
     default: 
      throw new ArgumentOutOfRangeException(nameof(dateTimeConversionTypes), dateTimeConversionTypes, null); 
    } 
} 

enter image description here

+1

どちらの場合でもDateTimeOffsetを使用する必要がありますか? – mayu

+0

@mayu:できません。これは、ViewModel「DateTimeOffset」とUIコントロール「DateTime」を変換するWPFコンバータです。 –

+0

私はそうではありませんが、dtValueに+00:00のオフセットがあり、値にオフセット文字列がないことは奇妙です。あなたのデバッグウィンドウでは、 'dtValue'は' DateTimeOffset'です。デバッグをドラッグしましたか? – mayu

答えて

-1

私は答えを見つけたと確信してコミュニティを必要とすると思います。

これは、スイッチの場合と同じ変数名が使用されているためです。角かっこがあり、中実のスコープを持っているにもかかわらず、何とか(何故か分からないが)同じものとして2つの可変要素を扱っている。変数名をユニークなものに変更したとき、それは望ましい振る舞いをし始めました。

+1

このアサーションを証明してください。それは正しいとは言えません。コードを2つ表示してください.1つは問題があり、もう1つはそうではありませんので、あなたが記述したとおりに動作することがわかります。私たちはそれをコピーし、貼り付けて実行できるはずです。 – Enigmativity

+0

@Enigmativity: 'dtValue'は、' DateTime'でも 'Offset'をどう説明しますか? –

+0

私はこれが事実であることを証明するコードを見ることに興味があります。あなたはなぜか答えが分からない理由を示すことができるまで、「どういうわけか(なぜか分からない)」と言います。 – Enigmativity

0

私は知りませんが、私はdtValueが「のDateTimeOffsetは」(そのテキスト表現は、00を持っている理由です:00)として作成されたことを推測しています。

関連する問題