【问题标题】:method that returns array返回数组的方法
【发布时间】:2013-12-14 09:32:45
【问题描述】:

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

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

        return lines;
    }

我在返回参数中使用了未分配的变量'lines'

【问题讨论】:

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

标签: c# arrays methods


【解决方案1】:

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

您的方法最好使用列表:

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

    return lines.ToArray();

【讨论】:

  • 当然他也可以考虑将方法的返回类型改为List&lt;string&gt;,然后直接return lines;
【解决方案2】:

您遇到的错误是因为使用了未初始化的参数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 无法跨平台工作的魔术字符串的数组。

【讨论】:

  • 之前复制了错误的代码。您不需要运行 while 循环来获取所有行。而是使用 ReadToEnd 获取整个文件 n 用换行符将其拆分以获取数组
  • 这对于小文件来说是一种有用的方法,但可能会阻塞大文件 - ReadToEnd() 将整个文件读入内存
【解决方案3】:

试试这个

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

【讨论】:

    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2013-12-15
    • 2014-12-14
    • 2016-08-28
    相关资源
    最近更新 更多