我遇到了一个逐行读取文件的实现,如下所示:
using (StreamReader reader = File.OpenText(path))
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
}
但我个人会这样做:
foreach (string line in File.ReadLines(path))
{
}
有没有理由选择其中一个?
答案 0 :(得分:3)
<强>客观:强>
第一个是逐个选择行,然后执行此过程 当您流式传输数据时。
第二个一次生成IEnumerable<string>
然后你可以
开始处理这些行(来源MSDN - 我道歉要混合它
首先是ReadAllLines
。
<强>实用性:吗
yield
循环中有while
),直到您想要随时回来IEnumerable<string>
(即,在处理之前指定预期数据的信息),因此首先会略微增加开销。然而,需要注意的是,与IEnumerable
不同,这种开销相对较小,因为List
推迟了实际执行。一些good info到read。来自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)
比方法2更冗长。所以事情被填满的可能性更大。
更简洁,更直接地包含意图 - 更容易阅读和遵循更少的填充机会(比如忘记处理读者等)。