我在 WinForms 中,在将更改保存到数据库之前,我必须检查使用的 ErrorProvider 是否包含任何显示控件的错误。
我想出了几种方法来做到这一点:
ControlContainer 上的一个简单的 foreach 循环:
foreach (Control c in ctrlcontainer) { if (epOrderHeader.GetError(c) != string.Empty) { return true; } } return false;
使用 List 扩展方法 Exists(Predicate):
return (ctrlcontainer.Exists(c => epOrderHeader.GetError(c) != string.Empty);
从胃开始,我预计第二个是最快的,但是使用我发现的 Eqatec Profiler,foreach 循环稍微快一些(在我的情况下大约 1 毫秒)。虽然这无关紧要,但我仍然想知道为什么会发生这种情况?
编译器如何翻译这些方法,为什么第一个更快?