Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 例外指导_C# - Fatal编程技术网

C# 例外指导

C# 例外指导,c#,C#,System.NullReferenceException:“对象引用未设置为对象的实例。” 在此行上引发异常: AnnuityReader.WriteLine(fields[0] + "," + fields[1] + "," + fields[3] + "," + fields[4]); 我知道这里有一些类似的帖子已经解决了,但我还没有弄明白。欢迎您的任何意见 InitializeComponent(); } StreamWriter AnnuityRead

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();
    }
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)继续;