2013-12-14 100 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

當然,他也可以考慮直接將方法的返回類型更改爲'列出',然後'返回行;'。 –