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

プログラムを実行すると、会社名と従業員数が配列に分割されます。その部分は正常に機能しています。すべてを String companyName に格納するだけです。クラスオブジェクトの異なるフィールドに値を保存するように変更しようとすると、エラーが発生します。

4

2 に答える 2

4

例にある行で行を分割する"\\n"と、2 つの項目を持つ単一の配列が得られます。最初の項目は の左側にあったもの\nで、2 番目の項目は右側にあったものです。

コードでは、これら 2 つの項目をループ処理し、Configurationそれぞれをコンストラクターの最初のパラメーターとして渡す新しいオブジェクトを作成しています。

コンストラクターは、名前と番号の 2 つのパラメーターを受け取ります。各行で、分割の最初の項目は名前で、2 番目の項目は番号 (文字列表現) です。オブジェクトを作成するときは、最初のパラメーターとして両方の部分を個別に渡すのではなく、両方を使用する必要があります。数字は文字列として持っていますが、コンストラクターで使用できるようにするには、最初に整数に変換する必要があります...

その部分を整理したら、あなたが抱えている問題を解決するはずです (それが何であれ)。

于 2012-04-21T07:10:49.997 に答える
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();
于 2012-04-21T07:46:56.747 に答える