Объединение действий и функции в одном параметреC#

Место общения программистов C#
Ответить
Anonymous
 Объединение действий и функции в одном параметре

Сообщение Anonymous »

У меня есть много методов, которые требуют некоторого журнала с тем же шаблоном. Некоторые методы должны вернуть какую -то ценность, некоторые этого не делают. Я создал метод с параметром действия, чтобы избежать копирования всей логики. Похоже: < /p>

private void Execute(Action action)
{
Logger.Start();
try
{
action();
}
catch(Exception exception)
{
Logger.WriteException();
throw;
}
finally
{
Logger.Finish();
}
}
< /code>

Теперь у меня есть некоторые вызовы, которые такие, как < /p>

public void DoSomething(string parameter)
{
Execute(() => GetProvider(parameter).DoSomething());
}
< /code>

Но мне нужна некоторая функция, которая возвращает значения. Как лучше всего это сделать?
Я нашел два сейчас: < /p>

1) Создайте копию метода выполнения с func < /p>

private T Execute(Func action)
{
Logger.Start();
try
{
return action();
}
catch(Exception exception)
{
Logger.WriteException();
throw;
}
finally
{
Logger.Finish();
}
}
< /code>

Этот метод работает, но также имеет некоторые копии. : < /p>

public Result DoSomething(string parameter)
{
Result result = null;
Execute(() => result = GetProvider(parameter).DoSomething());
return result;
}
< /code>

Это не требует копирования вставки, но не выглядит так красиво. < /p>

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

Подробнее здесь: https://stackoverflow.com/questions/157 ... -parameter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»