Я работал с делегатами действий на C # в надежде узнать о них больше и подумать, где они могут быть полезны.
Кто-нибудь использовал Action Delegate, и если да, то почему? или вы могли бы привести несколько примеров, где это могло бы быть полезно?
MSDN говорит:
Этот делегат используется методами Array.ForEach и List.ForEach для выполнения действия с каждым элементом массива или списка.
Кроме того, вы можете использовать его как универсальный делегат, который принимает 1-3 параметра без возврата какого-либо значения.
Вот небольшой пример, демонстрирующий полезность делегата действия.
Обратите внимание, что метод foreach выполняет итерацию по коллекции имен и выполняет
print
метод для каждого члена коллекции. Это своего рода смена парадигмы для нас, разработчиков C #, по мере того, как мы движемся к более функциональному стилю программирования. (Для получения дополнительной информации об информатике, стоящей за этим, прочтите это: http://en.wikipedia.org/wiki/Map_(higher-order_function) .Теперь, если вы используете C # 3, вы можете немного улучшить это с помощью лямбда-выражения, например:
источник
Что ж, одну вещь вы могли бы сделать, если у вас есть переключатель:
И с помощью мощи действий вы можете превратить этот переключатель в словарь:
...
Или вы можете пойти дальше:
....
Еще пара примеров. Конечно, более очевидным применением будут методы расширения Linq.
источник
Вы можете использовать действия для коротких обработчиков событий:
источник
Я однажды использовал такой делегат действия в проекте:
все, что он делает, это сохраняет действие (вызов метода) для определенного типа управления, чтобы вы могли очистить все элементы управления в форме до значений по умолчанию.
источник
Пример использования Action <>.
Console.WriteLine имеет удовлетворительную подпись
Action<string>
.Надеюсь это поможет
источник
Я использую его, когда имею дело с незаконными вызовами перекрестных потоков. Например:
Я должен отдать должное пользователю Reed Copsey SO 65358 за решение. Мой полный вопрос с ответами: SO Вопрос 2587930
источник
Я использовал его как обратный вызов в обработчике событий. Когда я вызываю событие, я передаю метод, принимающий строку в качестве параметра. Вот как выглядит постановка ивента:
Метод:
Это объявление класса события Args:
Таким образом, я могу вызвать метод, переданный из обработчика событий, с некоторым параметром для обновления данных. Я использую это, чтобы запросить у пользователя некоторую информацию.
источник
В тестах мы используем множество функций делегирования действий. Когда нам нужно создать какой-то объект по умолчанию, а позже нужно его изменить. Я привел небольшой пример. Для создания объекта «человек по умолчанию» (Джон Доу) мы используем
BuildPerson()
функцию. Позже мы добавим и Джейн Доу, но изменим ее дату рождения, имя и рост.источник