例外指导[重复]

问题描述 投票:-2回答:1

此问题已经在这里有了答案:

System.NullReferenceException:'对象引用未设置为对象的实例。'

在此行引发异常:

AnnuityReader.WriteLine(fields[0] + "," + fields[1] + "," + fields[3] + "," + fields[4]);

我知道这里有一些类似的帖子已经解决,但是我还没有弄清楚。任何输入表示赞赏。

        InitializeComponent();
    }
    StreamWriter AnnuityReader;
    List<string[]> Accounts = new List<string[]>();
    private int x;

    private void Assignment2_Load(object sender, EventArgs e)
    {
        string currentLine;
        string[] fields = new string[2]; 
        //Create streamreader
        StreamReader AnnuityReader = new StreamReader("annuities.txt");

        while (AnnuityReader.EndOfStream == false)
        {
            currentLine = AnnuityReader.ReadLine(); 
            fields = currentLine.Split(',');
            Accounts.Add(fields);
            cmbAccount.Items.Add(fields[0]);
        }
        AnnuityReader.Close(); //Creates dictionary

    }

    private void cmbAccount_SelectedIndexChanged(object sender, EventArgs e)
    {
        lstAccountDetails.Items.Clear();
        int index = cmbAccount.SelectedIndex;
        string[] fields;
        fields = Accounts[index];

        lstAccountDetails.Items.Add(String.Format("{0,10} {1,10}{2,10}", "Rate", "Deposit($)", "Value($)"));
        lstAccountDetails.Items.Add(String.Format("{0,10} {1,10:C}{2,10:C}", fields[1], double.Parse(fields[2]), double.Parse(fields[4])));

    }

    private void btnProcess_Click(object sender, EventArgs e)
    {
        lstAccountDetails.Items.Clear();
        double deposit;
        int index = cmbAccount.SelectedIndex;
        string[] fields = Accounts[index];

        try
        {
            deposit = double.Parse(txtDeposit.Text);
        }
        catch
        {
            MessageBox.Show("Enter a positive number");
            txtDeposit.SelectAll();
            txtDeposit.Focus();
            return;
        }
        double currentValue = double.Parse(fields[4]);
        if (deposit > 0)
        {
            currentValue += deposit;

        }
        else
            MessageBox.Show("Please enter a positive number");

        fields[4] = currentValue.ToString();
        fields = Accounts[x];

        AnnuityReader.WriteLine(fields[0] + "," + fields[1] + "," + fields[3] + "," + fields[4]);
        lstAccountDetails.Items.Add(String.Format("{0,10} {1,10}{2,10}", "Rate", "Deposit($)", "Value($)"));
        lstAccountDetails.Items.Add(String.Format("{0,10} {1,10:C}{2,10:C}", fields[1], double.Parse(fields[2]), double.Parse(fields[4])));

        txtDeposit.Clear();
        AnnuityReader.Close();
    }
c#
1个回答
0
投票
错误很明显。你调用的对象是空的。您正在定义StreamWriter AnnuityReader,但是您正在使用该引用而未在btnProcess_Click功能中设置对象。

您可以通过两种方式解决。使用之前,需要将其设置为构造函数或btnProcess_Click函数中的实例。您可以像在Assignment2_Load功能中一样将其设置为对象。

StreamReader AnnuityReader = new StreamReader("annuities.txt");

© www.soinside.com 2019 - 2024. All rights reserved.