我开始使用C#,我创建了一个方法,从文本流向数组添加值,并按如下方式返回数组:
private static string[] getLines(StreamReader myStream)
{
string[] lines;
while (!myStream.EndOfStream)
{
lines = new string[] { myStream.ReadLine() };
}
return lines;
}
我在return参数中使用未分配的变量'lines'。
答案 0 :(得分:5)
您需要初始化变量'lines',因为编译器会识别出循环包含零元素的可能性,并且您不能将未初始化的变量作为方法的值返回。但这是你遇到的最少的问题。 您没有添加到阵列,事实上,一旦初始化,您就无法增加阵列的容量。 您将看到,当此代码运行时,您将只获得一个长度为1的数组,该数组仅包含文本的最后一个元素。这是因为您不断重新初始化阵列。 (注意'新'这个词?)
使用列表可以更好地提供您的方法:
List<string> lines = new List<string>();
while (!myStream.EndOfStream)
{
lines.Add(myStream.ReadLine());
}
return lines.ToArray();
答案 1 :(得分:1)
您获得的错误是因为使用了未初始化的参数lines
。如果要读取整个文件,请使用ReadToEnd()
而不是在迭代中读取行。它有助于避免while
循环。
private static string[] getLines(StreamReader myStream)
{
string[] lines = null;
if(myStream != null)
{
lines = myStream.ReadToEnd().Split('\n');
}
return lines;
}
您还可以使用.Split(new []{Environment.NewLine}, StringSplitOptions.None);
来获取避免\n
魔法字符串的数组,该字符串无法跨平台工作。
答案 2 :(得分:0)
试试这个
private static string[] getLines(StreamReader myStream)
{
List<string> lines = new List<string>();
while (!myStream.EndOfStream)
{
lines.Add(myStream.ReadLine());
}
return lines.ToArray();
}