c# – 返回LINQ结果时何时调用ToList的经验法则
我正在寻找在IEnumerables上调用ToList / ToArray / MemoizeAll(Rx)的经验法则,而不是在返回IEnumerable时返回查询本身.
通常我发现最好只是返回查询,让调用者决定是否需要一个列表,但是有时候它可以回来,因为linq的懒惰性质而在后面咬你. 我想收集如下指导:
解决方法
首先,你不应该在查询中有副作用.这是最糟糕的做法.查询应该回答一个问题,不产生影响.
您的问题的答案是:当调用者期望查询时返回查询;当调用者期望列表时返回一个列表.当您设计方法时,请确定调用者更有可能需要什么,实现该方法,然后记录它. 在考虑调用者是否要查询或列表时,请考虑查询和列表之间的差异: >查询始终是最新的.如果对象/数据库/查询查询的任何内容都会更改其内容,那么如果再次运行查询,查询结果将会更改.列表不更改其内容,因此列表过期.如果您的呼叫者需要最新的数据,那么请给他们一个查询.如果他们需要他们可以随时检查的数据的快照,那么给他们一个清单. 没有简单的答案.答案与任何其他设计问题的答案相同:在功能的用户最有可能希望的范围内考虑每个可能解决方案的所有优缺点,然后选择合理的折衷解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |