返回数组的方法

时间:2013-12-14 09:32:46

标签: c# arrays methods

我开始使用C#,我创建了一个方法,从文本流向数组添加值,并按如下方式返回数组:

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

        return lines;
    }

我在return参数中使用未分配的变量'lines'

3 个答案:

答案 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();
}