获取错误:NullReferenceException未被处理

本文关键字:处理 NullReferenceException 取错误 获取 | 更新日期: 2023-09-27 18:15:10

string filename = o.FileName;
string[] textlines = File.ReadAllLines(filename);
string[] mainAndSublines = null;
int i = 0;
foreach(string textline in textlines)
{
   if (textline.Substring(0, 1) != " ")
   {
      i++;
   }
   mainAndSublines[i] = textlines[i];   //Getting error, NullReferenceException was not handled
}

我得到了三个错误:

NullReferenceException未处理

获取错误:NullReferenceException未被处理

您已经将mainAndSublines初始化为null。

如果您提前知道所需的大小,请使用:

string[] mainAndSublines = new string[100];

如果你事先不知道你想要的大小,使用一个动态调整大小的容器,如List:

List<string> mainAndSublines = new List<string>();

仅仅因为你的数组mainAndSublines是空的,你不能访问一个数组的元素是空的…

实际上这里有两个问题-一个是您试图将值设置为空数组,另一个是您如何试图查找该行的第一个字符是否为空格。

对于非空格起始行,我将使用List<String>,因为您不知道将有多少行,但是您假设每一行都是非空的。幸运的是,使用StartsWith很容易解决这个问题。

如果你使用的是。net 3.5或更高版本的话,我会然后使用LINQ,这使得整个事情真的很简单:
List<string> mainAndSublines = File.ReadAllLines(filename)
                                   .Where(x => !x.StartsWith(" "))
                                   .ToList();

在。net 4中,您可以使用File.ReadLines而不是File.ReadAllLines来提高内存效率-这将流式传输文件,而不是将整个内容加载到内存中。

您还需要初始化第二个数组,就像您初始化第一个数组一样,可能大小相等。

string[] mainAndSublines = new string[textlines.Length];

但是这里最合适的解决方案是Mark的一个自动调整大小的容器。