2012-04-22 2 views
1

У меня есть поле свойства DateTime в структуре. Я пытаюсь проверить дату ввода, чтобы убедиться, что введенное значение не будет в будущем.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; 
     } 
    } 
} 

Когда я теперь пытаюсь запустить этот код я постоянно получаю StackOverflowException с сообщением «Невозможно вычислить выражение, так как текущий поток находится в состоянии переполнения стека. "

любые идеи о том, почему это так, или как это исправить?

-Спасибо.

+0

Можете ли вы дать веские основания для использования структуры? – ChaosPandion

+0

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

+1

@Jeremy Thompson - Я уверен, что в какой-то момент я прочитал этот вопрос. Мое намерение состоит в том, чтобы понять, почему они решили использовать его. – ChaosPandion

ответ

4

Вы не звонишь свойство под названием Year, чей get аксессор называют Year, чье get аксессор называют 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; 
     } 
    } 
} 
Смежные вопросы