Отже, було багато коментарів щодо того, що метод розширення ForEach не підходить, оскільки він не повертає значення, як методи розширення LINQ. Хоча це фактичне твердження, воно не зовсім вірно.
Усі методи розширення LINQ повертають значення, щоб вони могли бути пов'язані між собою:
collection.Where(i => i.Name = "hello").Select(i => i.FullName);
Однак те, що LINQ реалізовано за допомогою методів розширення, не означає, що методи розширення повинні використовуватися однаково і повертати значення. Написання методу розширення для викриття загальної функціональності, яка не повертає значення, є цілком правильним використанням.
Специфічна аргументація щодо ForEach полягає в тому, що, виходячи з обмежень методів розширення (а саме те, що метод розширення ніколи не замінить успадкований метод з однаковою підписом ), може виникнути ситуація, коли користувацький метод розширення доступний для всіх класів, що імпементують Численні <T
> крім списку <T
>. Це може викликати плутанину, коли методи починають поводитися по-різному, залежно від того, викликається чи ні метод розширення чи метод успадкування.