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
答案 0 :(得分:4)
您已将mainAndSublines初始化为null。
如果您事先知道所需的尺寸,请使用:
string[] mainAndSublines = new string[100];
如果您事先不知道所需的大小,请使用动态调整大小的容器,例如List:
List<string> mainAndSublines = new List<string>();
答案 1 :(得分:1)
只是因为你的数组mainAndSublines
为null而你无法访问一个null的数组元素......
答案 2 :(得分:1)
你实际上在这里遇到了两个问题 - 一个是你试图将值设置为一个空数组,另一个是你是如何尝试查找是否第一个字符这条线是一个空间。
我会使用List<String>
作为非太空起跑线,因为你不知道会有多少行,但是你假设每行都会是非空的。幸运的是,使用StartsWith
很容易解决这个问题。
如果您使用的是.NET 3.5或更高版本,我然后使用LINQ,这使整个事情真的简单:
List<string> mainAndSublines = File.ReadAllLines(filename)
.Where(x => !x.StartsWith(" "))
.ToList();
在.NET 4中,您可以使用File.ReadLines
代替File.ReadAllLines
来提高内存效率 - 这会流式传输文件,而不是将整个内容加载到内存中。
答案 3 :(得分:0)
你需要初始化第二个数组,就像你先做的那样,可能等于大小。
string[] mainAndSublines = new string[textlines.Length];
但这里最合适的解决方案是Mark的一个 - 可自动调整大小的容器。