6

I am getting the object reference error in this line: emp[count].emp_id = int.Parse(parts[0]);

in this code

this program to read from file and store in array of object

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public class employees
    {
        public int emp_id;
        public string firstName;
        public string lastName;
        public double balance;
    }

    private void btnOpen_Click(object sender, EventArgs e)
    {
        OpenFileDialog file = new OpenFileDialog();
        DialogResult result = file.ShowDialog();
        if (result == DialogResult.Cancel) return;

        string fileName = file.FileName;
        StreamReader reader = new StreamReader(fileName);

        string[] lines = File.ReadAllLines(fileName);
        int emp_count = lines.Count<string>();
        employees[] emp = new employees[emp_count];
        int count = 0;
        foreach (string line in lines)
        {
            string[] parts = new string[4];
            parts = line.Split(',');
            **emp[count].emp_id = int.Parse(parts[0]);**
            emp[count].firstName = parts[1];
            emp[count].lastName = parts[2];
            emp[count].balance = double.Parse(parts[3]);
            count++;
            txtGet.Text += emp[count].emp_id + " " + emp[count].firstName + " " + emp[count].lastName + " " + emp[count].balance + " \n ";

        }
2
  • Sorry what about read data in one file and store it in array of object Then write this data in new file. string path="D:\\new.txt"; StreamWriter writer; writer = File.CreateText(path); string record = " "; for (int i = 0; i <emp_count; i++) { record+= emp[0].emp_id + "," + emp[1].firstName + "," + emp[2].lastName + "," + emp[3].balance + "\n"; } writer.WriteLine(record); writer.Close(); Commented Mar 23, 2012 at 1:57
  • Possible duplicate of What does "Object reference not set to an instance of an object" mean? Commented Jan 6, 2016 at 20:06

2 Answers 2

12

You need to initialise emp[count] to something.

You can do this by adding the following:

foreach (string line in lines) 
{ 
    emp[count] = new employees();
    string[] parts = new string[4]; 
    //....
}

When you call employees[] emp = new employees[emp_count]; you initilise emp to an array of employees with the length of emp_count.

emp[0] = null;
emp[1] = null;
//etc.

Each element inside emp also needs to be instantiated before you can use it.

Sign up to request clarification or add additional context in comments.

Comments

2

emp[0] has not been initialized. Class employees is a nullable type, which means arrays made of it are initialized to nulls. Initialize emp[count] to new employees.

BTW, "employees" is a strange name for a class that holds a single employee. I think it should be called Employee, then it makes sens to declare your array like this:

 `Employee[] employees = new Employee[emp_count];`

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.