2017-02-20 4 views
0

Я создаю приложение телефонной книги C#, которое вводит пользователя (имя, фамилию и номер телефона), сохраняет его в текстовом файле и может отображать его на Windows Form. В настоящее время, когда я начала программу я получаю StackOverflowException внутри этого метода:visual studio 2015 отладка код выхода 0x800703e9

public string Phone 
    { 
     get { return Phone; } 
     set 
     { // VS says that StackOverflowException happens here 

      if (value.Length == 10) 
      { 
       Phone = value; 
      } 

      else 
      { 
       Phone = "0000000000"; 
      } 
     } 
    } 

Я считаю, что исключение происходит, когда я пытаюсь прочитать номер телефона из текстового файла. После кода из метода Read:

   foreach (var line in lines) 
       { 
        string[] entries = line.Split('`'); 

        Contact newContact = new Contact(); 

        newContact.FirstName = entries[0]; 
        newContact.LastName = entries[1]; 
        newContact.Phone = entries[2]; //I think exception happens here 

        contactList.Add(newContact); 

Однако, когда я ставлю точку останова в этой строке и перейти в режим отладки, когда я наведите курсор мыши на Phone в строке Phone = value;, VS выходит из режима отладки примерно через 6 секунд. Это выход после того, как я парить Phone и VS выходит из режима отладки:

ContactsList.vshost.exe '(Managed (v4.0.30319)): Loaded ' C: \ WINDOWS \ Microsoft.NET \ сборка \ GAC_MSIL \ System.Configuration \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Configuration.dll ', Пропущенные символы загрузки. Модуль оптимизирован, и опция отладки включена только «Мой код». Программа «[5200] ContactsList.vshost.exe: Managed (v4.0.30319)» вышла с кодом -2147023895 (0x800703e9).

Я пробовал много решений (перезагрузка VS, очистка и восстановление, включение/отключение различных настроек), но для жизни меня не могу решить проблему. Пробовал искать код выхода 0x800703e9, все же теперь идея, что это такое, все, что я знаю, это то, что оно имеет какое-то отношение к StackOverflowException. Любые решения этой проблемы?

ответ

4

Всякий раз, когда вы присваиваете значение свойству Phone, его сеттер будет запущен, в настройщике вы снова присвоили значения одной и той же переменной, чтобы снова запустить то же самое, и процесс продолжится. Так что ваш код будет производить бесконечные присвоения использовать резервную частную собственность, как следующее:

private string _Phone; 
public string Phone 
{ 
    get { return _Phone; } 
    set 
    { // VS says that StackOverflowException happens here 

     if (value.Length == 10) 
     { 
      _Phone = value; 
     } 

     else 
     { 
      _Phone = "0000000000"; 
     } 
    } 
} 

Теперь вы в безопасности от таких рекурсивных заданий, так как вы используете резервное свойство здесь, поэтому при назначении значения вы сохраняете их в _Phone и извлечение значения из _Phone по get

+0

Спасибо, что решили проблему stackoverflow, но как насчет проблемы с отладчиком? Вы знаете, что вызывает код выхода? – TripleA

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