【问题标题】:Null Reference Exception in != Null while loop!= Null while 循环中的空引用异常
【发布时间】:2019-03-10 11:56:44
【问题描述】:

我得到一个对我来说没有意义的空引用异常。它在 while 循环的最后一行被调​​用。文件基本上是一个 csv,总是有 3 个用逗号分隔的值,每一行都需要一个信用卡对象。如果我使用不同的变量在循环内进行拆分,它会起作用,但我不明白为什么。

using (StreamReader fileInput = File.OpenText("Assignment5.txt"))
{
    String[] line = fileInput.ReadLine().Split(',');

    while (line != null)     // read each line
    {
        cards.Add(new CreditCard(line[0], double.Parse(line[1]), double.Parse(line[2])));
        line = fileInput.ReadLine().Split(',');
    }
}

【问题讨论】:

标签: c#


【解决方案1】:

这是因为 fileInput.ReadLine() 返回 null 而你不能在那里进行 split

尝试这种方法添加一些null-conditional operators (?.)

using (StreamReader fileInput = File.OpenText("Assignment5.txt"))
    {
        //Add null operator here
        String[] line = fileInput.ReadLine()?.Split(',');
        while (line != null)//read each line
        {
            cards.Add(new CreditCard(line[0], double.Parse(line[1]), double.Parse(line[2])));
            //Add nulls operators here
            line = fileInput.ReadLine()?.Split(',');
        }
    }

【讨论】:

  • 是的,我的想法太肤浅了,假设它说 line 是空的。
  • 是的,它有效,感谢您解释并向我展示新的东西。
【解决方案2】:

我想fileInput.ReadLine() 返回null 而你不能调用Split() 它...

【讨论】:

    【解决方案3】:

    修改了你的代码:

    string[] line;
    
    while ((line = fileInput.ReadLine().Split(',')) != null)     // read each line
        cards.Add(new CreditCard(line[0], double.Parse(line[1]), double.Parse(line[2])));
    

    您也可以使用 !string.IsNullOrWhitespace。 顺便说一句,这段代码line[0], double.Parse(line[1]), double.Parse(line[2]) 有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 2016-05-13
      相关资源
      最近更新 更多