获取错误: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未处理
您已经将mainAndSublines初始化为null。
如果您提前知道所需的大小,请使用:
string[] mainAndSublines = new string[100];
如果你事先不知道你想要的大小,使用一个动态调整大小的容器,如List:
List<string> mainAndSublines = new List<string>();
仅仅因为你的数组mainAndSublines
是空的,你不能访问一个数组的元素是空的…
实际上这里有两个问题-一个是您试图将值设置为空数组,另一个是您如何试图查找该行的第一个字符是否为空格。
对于非空格起始行,我将使用List<String>
,因为您不知道将有多少行,但是您假设每一行都是非空的。幸运的是,使用StartsWith
很容易解决这个问题。
List<string> mainAndSublines = File.ReadAllLines(filename)
.Where(x => !x.StartsWith(" "))
.ToList();
在。net 4中,您可以使用File.ReadLines
而不是File.ReadAllLines
来提高内存效率-这将流式传输文件,而不是将整个内容加载到内存中。
您还需要初始化第二个数组,就像您初始化第一个数组一样,可能大小相等。
string[] mainAndSublines = new string[textlines.Length];
但是这里最合适的解决方案是Mark的一个自动调整大小的容器。