2016-07-12 2 views
-2
public object Value 
{ 
    get 
    { 
     if (this.realDate) 
      return (object)base.Value; 
     return (object)DBNull.Value; 
    } 
    set 
    { 
     if (Convert.IsDBNull(value)) 
     { 
      this.realDate = false; 
      this.oldFormat = this.Format; 
      this.Format = DateTimePickerFormat.Custom; 
      this.CustomFormat = " "; 
     } 
     else 
     { 
      this.realDate = true; 
      // the line below is erroneous 
      this.Value = Convert.ToDateTime(value); 
     } 
    } 
} 

необработанное исключение типа «System.StackOverflowException» произошло в приложению application.exe я невежественный, почему это происходитНеобработанное исключение типа «System.StackOverflowException» произошло в application.exe

+2

Что означает 'return (object) base.Value;' do? Я предполагаю, что он снова вызывает один и тот же аксессуар. Однако мы не можем сказать без [mcve]. И ваш сеттер определенно называет себя ненулевыми значениями ... –

ответ

4
public object Value 
{ 
    … 
    set 
    { 
     this.Value = value; 
    } 
} 

Это по существу вызовет сеттер Value. Таким образом, вы вызываете сеттер из сеттера из сеттера из сеттера ... в результате получается бесконечный цикл, который останавливается с помощью исключения StackOverflowException.

У вас должно быть поле для заполнения , на которое вы пишете свое значение, например. что-то вроде этого:

private object _value; 

public object Value 
{ 
    get { return _value; } 
    set 
    { 
     // some logic 
     _value = value; 
    } 
} 
+0

Большое спасибо ... Он работал как шарм. –

+0

@saqibali Добро пожаловать! Пожалуйста, не забывайте [принять ответ] (http://meta.stackexchange.com/a/5235/141542), если он решил вашу проблему, чтобы отметить этот вопрос как разрешенный. – poke

0

У вас есть бесконечный рекурсивный вызов внутри Value добытчика:

(object)base.Value; 

Что вызывает StackOverflow

Смежные вопросы