像这样的编程模式经常出现:
int staleCount = 0;
fileUpdatesGridView.DataSource = MultiMerger.TargetIds
.Select(id =>
{
FileDatabaseMerger merger = MultiMerger.GetMerger(id);
if (merger.TargetIsStale)
staleCount++;
return new
{
Id = id,
IsStale = merger.TargetIsStale,
// ...
};
})
.ToList();
fileUpdatesGridView.DataBind();
fileUpdatesMergeButton.Enabled = staleCount > 0;
我不确定是否有更简洁的方法来编码?
即使是这样,这样做是不是不好的做法?
不,严格来说,这并不是“不好的做法”(例如使用用户输入的字符串连接来构造 SQL 查询或使用goto
).
有时这样的代码比几个查询更具可读性/foreach
或无副作用Aggregate
称呼。至少尝试写也是个好主意foreach
和无副作用版本,看看哪个版本更具可读性/更容易证明正确性。
请注意:
- 通常很难推断此类代码会发生什么/何时发生。 IE。您围绕延迟执行 LINQ 查询这一事实进行了示例黑客攻击
.ToList()
调用,否则将不会计算该值。
- 纯函数可以并行运行,一旦产生副作用就需要非常小心地这样做
- 如果您需要将 LINQ-to-Object 转换为 LINQ-to-SQL,则必须重写此类查询
- 通常,LINQ 查询倾向于没有副作用的函数式编程风格(因此按照惯例,读者不会期望代码中出现副作用)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)