2016-12-12 16 views
0

私は、NULL可能なDateTimeを返すWEBApiからの応答の契約をしています。しかし、DateTimeのみにする必要があり、nullの場合はDateTime.MaxValueという値にします。DateTimeの変換? DateTime to C#のセッター関数

private DateTime endDate; 
public DateTime? EndDate 
    { 
     get { return endDate; } 
     set 
     { 
      if (value == null) 
       endDate = DateTime.MaxValue; 
      else 
      { 
       endDate = value; 
      } 
     } 
    } 

しかし、この方法では明示的にDateTimeを変換する必要がありますか?私のコード全体でDateTimeに。では、セッター機能がどのように機能するのだろうかと思っていましたか?最初に初期化され、次にDataTypeがチェックされますか?その場合は、上記のコードを次のコードに置き換えることができます。

private DateTime endDate; 
public DateTime EndDate 
    { 
     get { return endDate; } 
     set 
     { 
      if (value == null) 
       endDate = DateTime.MaxValue; 
      else 
      { 
       endDate = value; 
      } 
     } 
    } 

これは可能ですか?あるいは、デシリアライズ中にDataTypeチェックの後にSetter関数が呼び出されるのでしょうか?

+0

デフォルトの外観はどうですか? 'DateTime.MaxValue'? – nozzleman

+0

はい、デフォルトはDateTime.MaxValueです –

+0

私はあなたの唯一のオプションはヌル合体演算子を使用することだと思います。 – NoviceProgrammer

答えて

3

いいえ、それはできません。渡される値は、プロパティと同じ型である必要があります。あなたは、あなたのコード内の別のプロパティを使用することができます。

public DateTime? ApiEndDate { get; set; } 

public DateTime EndDate => ApiEndDate ?? DateTime.MaxValue; 

(あなたはそれがEndDateとしてそれを残し、他の名前を変更する名前を変更することができない場合)、あなたのコード内の他のプロパティを使用することができます今のAPIは、プロパティApiEndDataを使用しています。

2

いいえ、それはできません。デフォルトのプロパティを作成して値を取得することができます。

public DateTime EndDateOrDefault 
{ 
    get { return endDate; } 
} 

コード内でそのプロパティを呼び出します。現在の財産をサービス契約に準拠させることができます。

+0

したがって、データ型はsetter関数が呼び出される前にチェックされますか? –

+0

あなたの現在のプロパティはそのままのため、サービスの要件は変更されません。毎回 '.Value'を呼び出さなくて済むように、すべてのコードでこのプロパティを呼び出してください。 –