C# - List 추가

한글 영어가 저장되어 있는 txt 파일을 불러와 리스트에 추가하려고 하는데, 자꾸 마지막 줄이 중복 저장되어서 처리를 제대로 할 수 없는 것을 발견하였다.

 

예를 들어,

하나 one
둘 two
셋 three
넷 four

이라는 txt 파일을 선택해 열었다고 하자.

class Numbers 
{
	public string kor;
	public string eng;
}
List<Numbers> num;
ReadF()
{
	num = new List<Numbers>();
    Numbers n = new Numbers();
    OpenFileDialog ofd = new OpenFileDialog();
    if(ofd.ShowDialog()==DialogResult.OK)
    {
    	string line, k, e;
        stiring[] temp = new string[2];
        StreamReader sr = new StreamReader(ofd.FileName);
        while(!sr.EndOfStream)
        {
        	line = sr.ReadLine();
            temp = line.Split(' ');
            n.kor = temp[0];
            n.eng = temp[1];
            num.Add(n);
		}
        sr.Close();
     }
}
    

( 코드블럭은 처음이라 정렬이 엉망이어도 이해부탁드립니다. )

 

이런 방식으로 실행시키면 결국 num이라는 리스트에는 "넷 four"가 네번 추가됨을 발견했다.

첫번째 ReadLine()을 했을 때 "하나 one"이 리스트에 추가되고,

두번째 ReadLine()을 했을 때 "하나 one"에 "둘 two"가 추가되는 것이 아니라, "둘 two" "둘 two"가 저장된다.

 

클래스가 아예 수정되어서 그런건가 ? 갑자기 그런 생각이 든다. 

아직 확실하게는 모르겠다 ( 짧은 지식 ㅠ;; )

 

아무튼 폭풍 구글링 하다가 리스트 사용 방법에서 원소 추가에 대한 코드를 보고 혹시나 하는 마음에 수정해보았는데, 됐다 !!

 

class Numbers 
{
	public string kor;
	public string eng;
    
    //생성자 추가
    public Numbers(string k, string e)
    {
    	kor=k;
        eng=e;
    }
}
List<Numbers> num;
ReadF()
{
	num = new List<Numbers>();
    OpenFileDialog ofd = new OpenFileDialog();
    if(ofd.ShowDialog()==DialogResult.OK)
    {
    	string line, k, e;
        stiring[] temp = new string[2];
        StreamReader sr = new StreamReader(ofd.FileName);
        while(!sr.EndOfStream)
        {
        	line = sr.ReadLine();
            temp = line.Split(' ');
            kor = temp[0];
            eng = temp[1];
            num.Add(new Numbers(kor,eng));
		}
        sr.Close();
     }
}

수정한 코드는 요것이다!

 

참고: https://freeprog.tistory.com/247