Здравствуйте, Sinclair, Вы писали:
S>>Это не то:
S>>https://github.com/microsoft/referencesource/blob/51cf7850defa8a17d815b4700b67116e3fa283c2/System.Core/System/Linq/Enumerable.cs#L899
S>>https://github.com/microsoft/referencesource/blob/51cf7850defa8a17d815b4700b67116e3fa283c2/System.Core/System/Linq/Enumerable.cs#L1265
S>Да, не то. Обратите внимание, что в первом примере указанный вами метод — приватный. Он вызывается из публичного метода, где, собственно, и происходит энергичная проверка аргументов.
S>Во втором примере опять же указанный метод не является iterator block. Он вызывает iterator block, который снаружи не виден и в нём проверки аргументов не происходит.
Верно, подзабыл уже детали из этой статьи:
We’ve just hit a design flaw in C#. Iterator blocks in C# simply don’t work nicely when you want to split execution between "immediate" (usually for validation) and "deferred". Instead, we have to split our implementation into two: a normal method for validation, which then calls the iterator method for the deferred processing:
https://codeblog.jonskeet.uk/2010/09/03/reimplementing-linq-to-objects-part-2-quot-where-quot/