2012-04-22 18 views
1

私は構造体にDateTimeプロパティフィールドを持っています。私は入力された値が将来ではないことを確認するためにinputdateを検証しようとしています。StackOverflowException日付を比較するとき

私は、次のコードを使用しています:私は今、私はメッセージでStackOverflowExceptionがを得続けるこのコードを実行しようとすると、現在のスレッドがスタックオーバーフロー状態であるため

public struct Car 
{ 
    public DateTime Year 
    { 
     get 
     { 
      return Year; 
     } 

     set 
     { 
      if (value > DateTime.Now) 
       throw new InvalidOperationException("Date cannot be in the futrure"); 
      else 
       Year = value; 
     } 
    } 
} 

は、「式を評価することはできません。 "

これはなぜか、またはこれを修正する方法に関するアイデアですか?

- おねがいします。

+0

構造体を使用する理由はありますか? – ChaosPandion

+0

@ChaosPandion http://stackoverflow.com/questions/203695/structure-vs-class-in-c-sharp –

+1

@Jeremy Thompson - 私はある時点でその質問を読んだことは確かです。私の意図は、なぜ彼らがそれを使用することを選択したのかを理解することです。 – ChaosPandion

答えて

4

あなたは、そのgetアクセサgetアクセサあなたのスタックオーバーフローまで、等々Yearを呼び出して...というように、とYearを呼び出しYearというプロパティを、呼んでいます。

実際の値を保存するには、プライベートフィールドprivate DateTime _yearを作成する必要があります。

4

それ自体が戻ります...変数を設定してみてください。

public struct Car 
{ 
    private DateTime _year; 
    public DateTime Year 
    { 
     get 
     { 
      return _year; 
     } 

     set 
     { 
      if (value > DateTime.Now) 
       throw new InvalidOperationException("Date cannot be in the futrure"); 
      else 
       _year = value; 
     } 
    } 
}