2012-04-21 3 views
0

나는 C#의 클래스 객체에 배열 값을 전달하고 저장하는 방법을 알고 싶습니다.배열 값을 객체 클래스에 전달

여기 내 주요 프로그램 코드

public partial class Form1 : Form 
    { 
     List<Configuration> lines = new List<Configuration>(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      this.listBox1.Items.Clear(); 
      //Read in every line in the file 
      using (StreamReader reader = new StreamReader("file.txt")) 
      { 
       string line; 
       while ((line = reader.ReadLine()) != null) 
       { 
        string textfile = line; 
        string[] array = new string[] { "\\n" }; 
        string[] parts = textfile.Split(array, StringSplitOptions.RemoveEmptyEntries); 

        /////////////////////////////////////////////////// 
        for (int i = 0; i < parts.Length; i++) 
        { 
         lines.Add(new Configuration(parts[i],0)); 

        } 
        //lines.Add(new Configuration(line)); 

        //listBox1.Items.Add(line); 
       } 

      } 
      listBox1.DataSource = lines; 
      listBox1.DisplayMember = "CompanyName"; 
     } 
    } 

내 클래스 객체 코드

class Configuration 
    { 
     string _CompanyName; 
     int _Employees; 

     public Configuration(string companyname, int number_of_Employees) 
     { 
      _CompanyName = companyname; 
      _Employees = number_of_Employees; 
     } 

     //program properties and validation 
     public string CompanyName 
     { 
      set 
      { 
       _CompanyName = value; 
      } 
      get 
      { 
       return _CompanyName; 
      } 
     }// End of levelname validation 

     //program properties and validation 
     public int EmployeesNumber 
     { 
      set 
      { 
       _Employees = value; 
      } 
      get 
      { 
       return _Employees; 
      } 
     }// End of levelname validation 
    } 

순간 프로그램은 기업 당 직원의 회사 목록과 번호가 텍스트 파일을 읽습니다. 이

Microsoft\n92200 
Google\n33077 
Apple\n60400 
IBM\n426751 
Facebook\n3000 

같은 구조는 때 프로그램은 따로 배열로 직원의 회사 이름과 번호를 분할 실행합니다. 그 부분은 잘 작동하고, 그것은 문자열 companyName에 모든 것을 저장합니다. 클래스 개체의 다른 필드에 값을 저장하도록 수정하려고 시도하면 오류가 발생합니다.

+4

"나는 오류"- 그 오류는 무엇입니까? –

+0

사이드 노트 : \ n은 매우 특이한 구분 기호입니다. ","또는 단순히 공백과 같은 더 전통적인 것을 사용하지 않으시겠습니까? 만약 당신이 정말로 코드와 구성의 독자들을 하나의 행에서 열의 separtor로서 "new line"문자를 나타내는 것을 사용하여 conuse하고 싶지 않다면 ... –

답변

4

"\\n" 행을 예제에있는 행과 분리하면 두 개의 항목이있는 단일 배열이 생성됩니다. 첫 번째 항목은 \n의 왼쪽에 있고 두 번째 항목은 오른쪽에있는 항목입니다.

코드에서 두 항목을 반복하고 새로운 Configuration 개체를 생성자의 첫 번째 매개 변수로 각각 전달합니다.

생성자는 이름과 번호라는 두 개의 매개 변수를 사용합니다. 각 줄에서 첫 번째 분할 항목은 이름이고 두 번째 항목은 숫자 (문자열 표현)입니다. 두 부분을 개별적으로 생성자에 대한 첫 번째 매개 변수로 전달하는 대신 개체를 만들 때 둘 다 사용해야합니다. 비록 당신이 문자열로 숫자를 가지고 있기 때문에 생성자에서 그것을 사용할 수 있으려면 먼저 정수로 변환해야합니다 ...

일단 그 부분을 정렬하면, 나는 그 문제를 해결해야한다고 생각합니다. 당신은 (그것이 무엇이든) 가지고 있습니다.

2
var configs = 
    from line 
    in reader.ReadToEnd().Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries) 
    let pair = line.Split(new[] { "\\n"}, StringSplitOptions.RemoveEmptyEntries) 
    select new Configuration(companyname: pair.First(), number_of_Employees: int.Parse(pair.Last())); 

lines = configs.ToList(); 
+0

클래스 객체에 두 개 이상의 값을 전달하려면 어떻게해야합니까? 그것은 현재 첫 번째 요소와 마지막 요소를 가져옵니다. – UnknownUser

+0

그런 다음 "pair"를 "parts"로 바꾸고 First() 및 Last() 대신 indexing을 사용하십시오. "쌍"은 어쨌든 배열입니다. – user1339260