Если вам нужно использовать одну и ту же логику в нескольких местах, имеет смысл использовать отдельный метод.
Если вам нужно использовать логику только один раз и , она довольно короткая, имеет смысл использовать анонимную функцию. Если делегату требуется доступ к локальным переменным в методе, который его создает, анонимные функции действуют как замыкания, что также может быть очень удобно.
Кроме того, анонимная функция может быть полезной, даже если она достаточно длинная, если она используется для чего-то вроде распараллеливания с Parallel Extensions - отчасти это означает, что вы можете взять существующий последовательный код и распараллелить его «на месте» в большая степень.
Возможно, вы также захотите рассмотреть тестируемость - если код вашего делегата достаточно сложен, что требует собственных модульных тестов, его использование в качестве метода имеет большой смысл. (К сожалению, это должен быть либо внутренний метод, использующий InternalsVisibleTo
, либо публичный метод, где обычно вы хотите, чтобы он был закрытым, но такова жизнь.)