使用StreamReader.ReadLine和StreamReaderEnumerable之间的区别

时间:2017-09-12 16:09:18

标签: c#

这两个代码之间有什么区别吗?

1.     
  using (StreamReader sr = New StreamReader("filePath"))
  {       
      while ((string line = sr.ReadLine()) != null)
      {
          DoSomeThing();
      }
  }


2.  
   foreach (string line in new StreamReaderEnumerable("filePath"))
   {
       if (line != null)
       {
           DoSomeThing();
       }
   }

使用其中一个是否有任何性能问题,或者它们在运行时功能相同?

2 个答案:

答案 0 :(得分:1)

根据SteamReaderEnumerable的定义,使用StreamReader.ReadLine()。我注意到您的自定义解决方案使用相同的方法。因此,我建议使用选项1,因为您没有使用LINQ来处理这些行。这样就可以避免SteamReaderEnumerable类的额外开销。

如果您确实需要使用LINQ来访问这些行,SteamReaderEnumerable类将提供一种简单而强大的方法。

答案 1 :(得分:0)

  

这两个代码之间有什么区别吗?

是的 - 一个有效;一个没有。您的第二个代码块会无休止地循环,因为您永远不会更改while循环中line的值。 实际等价物将是:

foreach (string line in new StreamReaderEnumerable("filePath"))
{
    DoSomeThing();
}

查看示例代码,唯一的区别是枚举器对象的开销,这应该可以忽略不计。