2017-02-20 1 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"; 
      } 
     } 
    } 

는 내가 텍스트 파일에서 전화 번호를 읽으려고 할 때 예외가 발생 있다고 생각합니다. 다음 코드 읽기 방법에서이다 : 그러나

   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 = value;Phone 위에 마우스를 올려 때, VS가 약 6 초 후에 디버그 모드를 종료, 디버그 모드로 전환 할 때.

ContactsList.vshost.exe '(관리 (v4.0.30319)) : 로드': \ WINDOWS \ Microsoft.Net \ 조립 \의 GAC_MSIL C를 내가 Phone를 가져와 VS 디버그 모드를 종료 한 후이 출력입니다 \ 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

값을 가져와서 고맙습니다. 그렇다면 디버거의 문제는 해결 되었습니까? 종료 코드를 유발하는 것이 무엇인지 아십니까? – TripleA