问题描述:在IEnumerable使用时显示警告
分析:如果对IEnumerable多次读取操作,会有因数据源改变导致前后两次枚举项不固定的风险,最突出例子是读取数据库的时候,第二次foreach时恰好数据源发生了改变,那么读取出来的数据和第一次就不一致了。
查看测试代码
几乎所有返回类型为 IEnumerable<T> 或 IOrderedEnumerable<TElement> 的标准查询运算符都以延迟方式执行。如下表我们可以看到where时,返回的IEnumerable是延迟加载的。
标准查询运算符 |
Return Type |
立即执行 |
延迟流式执行 |
延迟非流式执行 |
TSource |
√ |
|||
√ |
||||
√ |
||||
√ |
||||
单个数值 |
√ |
|||
√ |
||||
√ |
||||
√ |
||||
√ |
||||
√ |
||||
√ |
||||