C# 例外指导
System.NullReferenceException:“对象引用未设置为对象的实例。” 在此行上引发异常:C# 例外指导,c#,C#,System.NullReferenceException:“对象引用未设置为对象的实例。” 在此行上引发异常: AnnuityReader.WriteLine(fields[0] + "," + fields[1] + "," + fields[3] + "," + fields[4]); 我知道这里有一些类似的帖子已经解决了,但我还没有弄明白。欢迎您的任何意见 InitializeComponent(); } StreamWriter AnnuityRead
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();
}
InitializeComponent();
}
StreamWriter年金领头人;
列表帐户=新列表();
私人INTX;
私有无效分配2_加载(对象发送方,事件参数e)
{
串电流线;
字符串[]字段=新字符串[2];
//创建streamreader
StreamReader AnnuityReader=新的StreamReader(“annuities.txt”);
while(AnnuityReader.EndOfStream==false)
{
currentLine=AnnuityReader.ReadLine();
字段=currentLine.Split(',');
Accounts.Add(字段);
cmbAccount.Items.Add(字段[0]);
}
AnnuityReader.Close();//创建字典
}
私有无效CMB帐户\u选择的索引已更改(对象发件人,事件参数e)
{
lstAccountDetails.Items.Clear();
int index=cmbAccount.SelectedIndex;
字符串[]字段;
字段=科目[索引];
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]);
}
私有void btnProcess\u单击(对象发送方,事件参数e)
{
lstAccountDetails.Items.Clear();
双重存款;
int index=cmbAccount.SelectedIndex;
字符串[]字段=科目[索引];
尝试
{
deposit=double.Parse(txtdosit.Text);
}
抓住
{
MessageBox.Show(“输入正数”);
txtDeposit.SelectAll();
txtDeposit.Focus();
返回;
}
double currentValue=double.Parse(字段[4]);
如果(存款>0)
{
现值+=存款;
}
其他的
MessageBox.Show(“请输入正数”);
字段[4]=currentValue.ToString();
字段=科目[x];
AnnuityReader.WriteLine(字段[0]+”、“+字段[1]+”、“+字段[3]+”、“+字段[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\u单击函数中设置对象
StreamReader AnnuityReader = new StreamReader("annuities.txt");
你可以用两种方法来解决它。在使用之前,您需要在构造函数或btnProcess\u单击函数中将其设置为实例。您可以像在Assignment2\u Load
函数中那样将其设置为对象
StreamReader AnnuityReader = new StreamReader("annuities.txt");
这回答了你的问题。如果链接复制没有回答您的问题-请遵循该问题中的所有调试指导,然后使用really。该行有七个对象引用:AnnuityReader
,字段
,以及字段[0]
到字段[4]
。其中一个(至少)为空。在那里放一个断点,当到达断点时,检查值并找出哪个是null
。您需要跳过.txt文件中的空行。如果(字段长度<5)继续;