2013-12-14 73 views
1

我开始了与C#和我创建值从文本流添加到一个数组,并返回数组的方法如下:方法,返回数组

private static string[] getLines(StreamReader myStream) 
    { 
     string[] lines; 
     while (!myStream.EndOfStream) 
     { 
      lines = new string[] { myStream.ReadLine() }; 
     } 

     return lines; 
    } 

我得到一个使用的未分配变量'行'在返回参数中。

+1

在声明处设置string [] lines = null。 – Akanksha

回答

1

你所得到的错误是因为unintialized参数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魔术字符串是行不通的跨平台的阵列。

+0

先前复制了错误的代码。您不需要在while循环中运行以获取所有行。改为使用ReadToEnd获取整个文件n用新行字符拆分以获得数组 – Akanksha

+0

这对小文件很有用,但可能会阻塞大文件 - “ReadToEnd()”将整个文件读入内存 –

0

试试这个

private static string[] getLines(StreamReader myStream) 
{ 
    List<string> lines = new List<string>(); 
    while (!myStream.EndOfStream) 
    { 
     lines.Add(myStream.ReadLine()); 
    } 
    return lines.ToArray(); 
} 
5

你需要初始化变量“行”,因为编译器识别出你的循环将包含零种元素的可能性,因此不能返回未初始化变量作为价值一个方法。但那是你的问题中最少的。 您并未将数组添加到数组中,事实上,一旦数组初始化后,就无法增加数组的容量。 你会看到,当这段代码运行时,你只会得到一个只包含文本最后一个元素的长度为1的数组。这是因为你不断重新初始化你的数组。 (注意这个词“新”?)

你的方法将与列表得到更好的服务:

List<string> lines = new List<string>(); 
    while (!myStream.EndOfStream) 
    { 
     lines.Add(myStream.ReadLine()); 
    } 

    return lines.ToArray(); 
+0

当然,他也可以考虑直接将方法的返回类型更改为'列出',然后'返回行;'。 –