此问题已经在这里有了答案:
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();
}
StreamWriter AnnuityReader
,但是您正在使用该引用而未在btnProcess_Click
功能中设置对象。您可以通过两种方式解决。使用之前,需要将其设置为构造函数或btnProcess_Click
函数中的实例。您可以像在Assignment2_Load
功能中一样将其设置为对象。
StreamReader AnnuityReader = new StreamReader("annuities.txt");