通常,当我处理LINQ序列时,我希望将每个项目发送到一个返回void的方法,从而避免foreach循环。然而,我还没有找到一种优雅的方法来做到这一点。今天,我写了以下代码:
private StreamWriter _sw;
private void streamToFile(List<ErrorEntry> errors)
{
if (_sw == null)
{
_sw = new StreamWriter(Path.Combine
(Path.GetDirectoryName(_targetDatabasePath), "errors.txt"));
}
Func<ErrorEntry, bool> writeSelector =
(e) => { _sw.WriteLine(getTabDelimititedLine(e)); return true; };
errors.Select(writeSelector);
_sw.Flush();
}正如您所看到的,我编写了一个返回true的lambda函数,并且我意识到Select方法将返回一个布尔值序列-我将忽略该序列。然而,这看起来有点低级和不靠谱。有什么优雅的方法可以做到这一点吗?或者我只是误用了LINQ?
谢谢。
发布于 2010-03-12 22:11:03
普遍的共识是LINQ用于查询和选择...而您使用传统的迭代方法进行循环和迭代。
我不想这么说,但是您将使用传统的foreach循环,因为您希望执行linq查询,并迭代生成的IEnumerable。它有助于代码的可读性,我承认LINQ很容易上瘾。您希望使用Lambdas和延迟执行来完成所有工作,但是循环应该留给传统的C#循环方法。这肯定会对副作用有所帮助。
https://stackoverflow.com/questions/2430033
复制相似问题