2015-01-27 3 views
1

이 개체의 목록을 가져 와서 텍스트 파일로 보내려고합니다. 텍스트 파일 형식은 다음과 같습니다.집합이 throw됩니다 StackOverflowException C#

name,IDnumber,department,value

이 꽤 몇 줄 그래서 나는이 읽기에 대한 코드입니다 . 그들을 파일을 읽고 쓰는 사용이 있습니다.


public void WriteFile(List<Employee> outList, string file) { 

     StreamWriter writeOut = new StreamWriter(file); 

     for (int i = 0; i < outList.Count; i++) { 

      writeOut.WriteLine(outList[i].name + '#' + outList[i].IDnum + '#' + outList[i].department + '#' + outList[i].position); 

     } 
     writeOut.close(); 
    } 

public List<Employee> ReadFile(string fileName) { 
     StreamReader fileIn = new StreamReader(fileName); 
     fileIn = File.OpenText(fileName); 
     List<Employee> list = new List<Employee>(); 
     string[] test; 
     string name; 
     string ID; 
     string dep; 
     string post; 

     while (!fileIn.EndOfStream || !File.Exists(fileName)) { 

      string inString = fileIn.ReadLine(); 
      test = inString.Split('#'); 
      name = test[0]; 
      ID = test[1]; 
      dep = test[2]; 
      post = test[3]; 
      Employee newEmp = new Employee(name, ID, dep, post); 
      list.Add(newEmp); 

     } 
     fileIn.Close(); 
     return list; 
    } 

내 클래스에 대한 코드입니다. 세트에서 오류가 발생했습니다.

public class Employee { 

    public string name { get { return name; } set { name = value; } } 
    public string IDnum { get { return IDnum; } set { IDnum = value; } } 
    public string department { get { return department; } set { department = value; } } 
    public string position { get { return position; } set { position = value; } } 

    public Employee() { 

     name = string.Empty; 
     IDnum = string.Empty; 
     department = string.Empty; 
     position = string.Empty; 

    } 

    public Employee(string newName, string newID) { 

     name = newName; 
     IDnum = newID; 
     department = string.Empty; 
     position = string.Empty; 

    } 

    public Employee(string newName, string newID, string newDep, string 
    newPost) { 

     name = newName; 
     IDnum = newID; 
     department = newPost; 
     position = newDep; 

    } 

} 

필요에 따라 기능을 설정하기 위해 누락 된 형식의 서식이 있는지 확실하지 않습니다. 이 함수는 내가 파일 안팎을 호출하는 함수입니다. 나는 데이터를 가져오고있는 중일 가능성이 높습니다. 당신이 IDnum에 대한 세터를 호출

IDnum = someValue; 

같은 작업을 수행 할 때 스택

public string IDnum { get { return IDnum; } set { IDnum = value; } } 

을 넘칠 때까지

답변

5

그것은 정말 일반적인 잡았다 ... 통과 C#을 의식이다 사용할 수 있습니다처럼

수정은 귀하의 경우에는

, 그것은 보인다! 당신이 myObj.name = "foo";을하려고 할 때

public string name { get { return name; } set { name = value; } } 

그래서 무슨 일이 ... 이제 하나의 속성 (이 비록 당신의 모든 속성에 적용) 살펴 보자?

set 메서드에서 다시 동일한 속성 name을 참조하십시오. 따라서 다시 돌아가는 name에 액세스하려고 시도합니다 (다시 StackOverflow가 될 때까지 반복적으로 반복됩니다).

적절한 명명 규칙을 가진 백업 필드가 여기에 규범 :

private string name; 
public string Name{get { return name; } set{ name = value; }} 

또는 더 나은, 반군 로직, auto-property 존재하지 않는 경우.

public string Name{ get; set; } 
+0

<3 감사합니다. –

2

당신은 실행되는, 이상 반복적으로 IDNUM 이상 다른 속성과 계속 전화 setter의 코드

IDnum = 값

스택이 부족할 때까지 IDnum의 setter를 호출합니다. 당신이 자동 등록

public string IDnum { get; set; } 
+0

구문은 어떻게되어야합니까? 'get {return IDnum;} 및 'set {IDnum = value; ' –

+0

++}이어야하며 다른 속성에는 동일한 문제가 있습니다. –

+0

대단히 감사합니다! 전에 자동으로 문제가 있었는데 그걸 일으키는 오류를 바로 잡은 것처럼 보입니다. –

0

당신은

public string name { get { return name; } set { name = value; } } 
public string IDnum { get { return IDnum; } set { IDnum = value; } } 
public string department { get { return department; } set { department = value; } } 
public string position { get { return position; } set { position = value; } } 

public string name { get; set; } 
public string IDnum { get; set; } 
public string department { get; set; } 
public string position { get; set; } 

을 변경하거나 백업 필드를 소개합니다 :

private string _name; 
public string name { get { return _name; } set { _name = value; } } 

는 C#에서 자동 구현 속성에 대한 추가 정보를 원하시면 https://msdn.microsoft.com/en-us/library/bb384054.aspx를 참조하십시오.

공용 속성의 일반적으로 사용되는 이름은 PascalCasing입니다. PascalCasing의 속성은 다음과 같습니다.

public string Name { get; set; } 
public string IdNum { get; set; } 
public string Department { get; set; } 
public string Position { get; set; } 
관련 문제