когда использовать или нет лямбда-выражения - PullRequest
4 голосов
/ 11 ноября 2009

Я вижу, что лямбда-выражения стали очень полезным инструментом в некоторых местах языка. Я часто их использую, и большую часть времени они подходят по размеру и делают код короче и, возможно, понятнее.

Теперь .. Я видел некоторые, я бы сказал, чрезмерное их использование. Некоторым людям они нравятся настолько, что они пытаются использовать их везде, где могут. Иногда код на C # выглядит как функциональный язык.

Другими факторами против являются затраты, основанные на использовании лямбда-отражения, и то, что не подходит для отладки.

Я хотел бы услышать мнения о том, насколько хорошо и насколько понятен код, использовать более или менее лямбда-выражения.

(это не лучший пример, но допустим, что это был триггер)

Я писал следующий код. Использование delegate { return null; } помогает мне избежать необходимости спрашивать, является ли событие нулевым или нет, каждый раз, когда я должен его использовать.

public delegate ContactCellInfo.Guest AddGuest();
public event AddGuest GuestRequest = delegate { return null;}

Я использую Resharper, и мудрый Resharper (даже если он несколько раз буквально ест память) сделал мне следующее предложение

public delegate ContactCellInfo.Guest AddGuest();
public event AddGuest GuestRequest = () => null;

На мой взгляд, код с использованием делегата выглядит более понятным. Я не против выражения Ламдба, просто хотел бы услышать несколько советов о том, как и когда их использовать.

1 Ответ

7 голосов
/ 11 ноября 2009

Здесь есть несколько вопросов.

Во-первых, как в вашем примере, использование лямбды против использования синтаксиса анонимного делегата. Сгенерированный код компилятором будет идентичен, поэтому он не сводится к разнице в производительности, но скорее к разнице в читаемости.

Лично я считаю лямбда-синтаксис простым для понимания. Я обнаружил, что лямбда-синтаксис почти всегда чище, более сжат и более понятен, чем синтаксис анонимного делегата, поэтому я предпочитаю его почти всегда.

Что касается использования лямбда-выражений во всем коде - Лично я их довольно большой пользователь. Я считаю, что они часто делают жизнь намного проще, чем определяют множество методов. Если часть кода не будет использоваться повторно какими-либо другими методами (он будет вызываться и существовать только в одном месте), я буду использовать лямбду для его выражения.

Если часть кода будет использоваться более одного раза, он должен быть извлечен в (неанонимный) метод. Кроме того, если часть кода может и должна быть протестирована, я стараюсь создать для нее метод, поскольку это облегчает тестируемость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...