Bad implementation of Enumerable.Single? 枚举 Single 的实现有问题吗?

20 浏览
0 Comments

Bad implementation of Enumerable.Single? 枚举 Single 的实现有问题吗?

我在Reflector中的Enumerable.cs文件中发现了这个实现。

我认为,如果有超过2个项目满足条件,他们应该在这里停止循环,为什么他们总是循环遍历整个集合?为了验证是否Reflector错误地反汇编了dll,我编写了一个简单的测试:

对于这个测试案例,我认为它会打印"getting 0, getting 1",然后抛出异常。但事实是,它保持打印"getting 0... getting 10"并抛出异常。

他们实现这个方法的算法性原因是什么?

**编辑** 一些人认为这是由于谓词表达式的副作用,经过深思熟虑和一些测试案例,我得出结论**在这种情况下副作用并不重要**。如果您不同意这个结论,请提供一个例子。

**12年后** 这是2023年,我发现最新的.NET已将实现方式更改为正确方式。

0