Возможно, я потерял участок, но, надеюсь, кто-то может указать мне в правильном направлении.Generic Func <> как параметр к базовому методу
Что я пытаюсь сделать?
Я пытаюсь написать некоторые базовые методы, которые принимают Func <> и действие, чтобы эти методы обрабатывали всю обработку исключений и т. Д., Поэтому его не повторяли повсюду, но позволяли производным классам определять, какие действия он выполняет хочет выполнить.
До сих пор это базовый класс.
public abstract class ServiceBase<T>
{
protected T Settings { get; set; }
protected ServiceBase(T setting)
{
Settings = setting;
}
public void ExecAction(Action action)
{
try
{
action();
}
catch (Exception exception)
{
throw new Exception(exception.Message);
}
}
public TResult ExecFunc<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> function)
{
try
{
/* what goes here?! */
}
catch (Exception exception)
{
throw new Exception(exception.Message);
}
}
}
Я хочу, чтобы выполнить это действие следующим образом в производном классе (это, кажется, работает):
public void Delete(string application, string key)
{
ExecAction(() => Settings.Delete(application, key));
}
И я хочу, чтобы выполнить Func подобным образом в производном классе но для жизни меня не может показаться, что нужно тренировать то, что нужно положить в базовый класс.
Я хочу, чтобы быть в состоянии назвать это следующим образом (если это возможно):
public object Get(string application, string key, int? expiration)
{
return ExecFunc(() => Settings.Get(application, key, expiration));
}
Могу ли я думать слишком сумасшедшим или же это возможно? Заранее благодарим за помощь.
Я не понимаю. Ваши обработчики исключений восстанавливают исключения, но без трассировки стека? – Amy
В качестве побочного примечания, 'throw new Exception', вероятно, здесь неправильно. По крайней мере, вы хотите увлечь «ex» как внутреннее исключение. Другой вариант - «throw», чтобы повторно выбросить его, не перезагружая стек, или просто не поймать его, если вы ничего не делаете с ним. – Kobi
Спасибо за ответы, не беспокойтесь о том, что обработка исключений будет обновлена. Это было просто для примера :-) – WestDiscGolf