3

我有一个我使用的 Cache 包装类,它提供类型安全和分段以及其他好东西。

我想通过缓存一个未物化的 LINQ 查询并只接受列表/集合来防止我在脚下开枪......

有没有办法检测 IEnumerable 是否是 LINQ 查询?

也许我正在回答我自己的问题,并且当 T 是 IEnumerable 但不是 ICollection 时应该抛出异常。

4

1 回答 1

3

我建议将其包装IEnumerable<T>在您自己的收藏中,自己“实现”它。

这将提供完全的安全性和更高的一致性,但可能会生成另一个集合实例并复制引用。

您总是可以检查ICollection<T>而不重新生成或类似的,但是将内容复制到您自己的列表中仍然有好处。一个主要的问题是,您可以控制集合的唯一实例——您不必担心另一个对象添加或删除项目(这可能是也可能不是问题,但对于分段可能有问题)。

于 2013-01-24T00:36:42.763 回答