【发布时间】:2012-07-18 21:55:19
【问题描述】:
在函数中返回 LINQ 查询的结果时,我遇到了很多 Collection was modified; enumeration operation may not execute 错误的情况,就像这样......(我应该添加函数作为接口的实现和结果让这个模块在另一个模块中使用。)
Public Function GetTheFuzzyFuzzbuzzes() As IEnumerable(of FuzzBuzz) _
Implements IFoo.GetTheFuzzyFuzzBuzzes
Return mySecretDataSource.Where(Function(x) x.IsFuzzy)
End Function
如果基础数据有可能被更改,我是否应该在函数或属性 getter 中返回 LINQ 查询结果时始终调用 .ToArray?我知道这样做会降低效率,但我觉得这样做是安全的,因此应该始终这样做以避免时间耦合问题。
编辑:
让我更好地解释问题域。
我们有一个基于图形的主要关注领域的实现,这是一个优化问题。实体表示为图形节点。用各种成本和其他参数加权的边表示节点之间的关系。当用户操作数据时,我们会创建不同的边,并根据当前状态评估他们可以采取的各种选项,从而为他们提供有关每个选项结果的反馈。其他用户和程序对服务器上的数据所做的更改会通过推送技术立即传播到客户端。我们使用了很多线程...
...所有这一切意味着我们有很多事情以非常异步的方式发生。
我们的程序分为多个模块(基于单一职责原则),其中包含一个合同项目和一个在运行时解决的实施项目,这意味着我们严重依赖接口。我们通常使用 IEnumerable 在模块之间传递数据(因为它们是 kind-of-sort-of 不可变的)。
【问题讨论】:
-
你能发布一个小的、可编译的程序来重现这个吗?
-
不幸的是,我们的代码库就像 50000+ LOC 和 68 个项目,所以制作一个好的例子会有点困难。请参阅问题中的扩展详细信息。
标签: .net vb.net linq return return-value