OpenText与ReadLines

时间:2016-01-21 05:46:28

标签: c# file-io stream readline

我遇到了一个逐行读取文件的实现,如下所示:

using (StreamReader reader = File.OpenText(path))
while (!reader.EndOfStream)
{
    string line = reader.ReadLine();
}

但我个人会这样做:

foreach (string line in File.ReadLines(path))
{

}

有没有理由选择其中一个?

2 个答案:

答案 0 :(得分:3)

<强>客观:

  • 第一个是逐个选择行,然后执行此过程 当您流式传输数据时。

  • 第二个一次生成IEnumerable<string>然后你可以 开始处理这些行(来源MSDN - 我道歉要混合它 首先是ReadAllLines

<强>实用性:吗

  • 在这个意义上,第一个更“流畅”。因为你可以选择 随意采取/处理和中断/继续。每当你需要一条线时,你拿一条线,你处理它然后你选择中断或继续。您甚至可以选择不再采取任何行(假设yield循环中有while),直到您想要随时回来
  • 第二个将获得IEnumerable<string>(即,在处理之前指定预期数据的信息),因此首先会略微增加开销。然而,需要注意的是,与IEnumerable不同,这种开销相对较小,因为List推迟了实际执行。一些good inforead

来自MSDN以下是ReadLines的用例:

  

对文件执行LINQ to Objects查询以获取过滤的集合   它的台词。

     

将返回的行集合写入带有的文件   File.WriteAllLines(String,IEnumerable&lt; String&gt;)方法,或附加它们   到

的现有文件      

File.AppendAllLines(String,IEnumerable&lt; String&gt;)方法。创建一个   立即填充的集合实例   IEnumerable的&LT; T&GT;其构造函数的字符串集合,例如   的IList&LT; T&GT;或队列&lt; T&gt;。

答案 1 :(得分:0)

方法1

比方法2更冗长。所以事情被填满的可能性更大。

方法2

更简洁,更直接地包含意图 - 更容易阅读和遵循更少的填充机会(比如忘记处理读者等)。