Преобразовать перечисление методов в один многоадресный делегат в C# - PullRequest
0 голосов
/ 03 марта 2020

У меня есть IEnumerable<ILog> объект с именем loggers. ILog имеет метод с именем Log, который соответствует делегату LogHandler. Я хотел бы создать один многоадресный делегат (logHandler), который вызывает в перечислении все Log методы. Один из способов сделать это:

LogHandler logHandler;
foreach (var logger in loggers)
{
    logHandler += logger.Log;
}

Мне любопытно, есть ли более понятный способ сделать это одним вкладышем. Пока что лучшее, что я придумал, это:

LogHandler logHandler = Delegate.Combine(loggers.Select(log => new LogHandler(log.Log) as Delegate).ToArray()) as LogHandler;

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

...