Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个我使用的 Cache 包装类,它提供类型安全和分段以及其他好东西。
我想通过缓存一个未物化的 LINQ 查询并只接受列表/集合来防止我在脚下开枪......
有没有办法检测 IEnumerable 是否是 LINQ 查询?
也许我正在回答我自己的问题,并且当 T 是 IEnumerable 但不是 ICollection 时应该抛出异常。
我建议将其包装IEnumerable<T>在您自己的收藏中,自己“实现”它。
IEnumerable<T>
这将提供完全的安全性和更高的一致性,但可能会生成另一个集合实例并复制引用。
您总是可以检查ICollection<T>而不重新生成或类似的,但是将内容复制到您自己的列表中仍然有好处。一个主要的问题是,您可以控制集合的唯一实例——您不必担心另一个对象添加或删除项目(这可能是也可能不是问题,但对于分段可能有问题)。
ICollection<T>