我可能會失去這個陰謀,但我希望有人能指出我的方向。Generic Func <>作爲基本方法的參數
我想要做什麼?
我想寫一些基本的方法,它採取Func <>和Action,以便這些方法處理所有的異常處理等,所以它不會重複遍佈整個地方,但允許派生類指定什麼操作想要執行。
到目前爲止,這是基類。
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));
}
而且我想以同樣的方式在派生類中執行函數求但是對於我來說,我似乎無法鍛鍊在基礎課上放置什麼東西。
我希望能夠調用它以下面的方式(如果可能):
public object Get(string application, string key, int? expiration)
{
return ExecFunc(() => Settings.Get(application, key, expiration));
}
我在想太瘋狂了或這可能嗎?預先感謝所有的幫助。
我不明白。異常處理程序正在重新拋出異常,但沒有堆棧跟蹤? – Amy 2010-06-16 15:25:59
作爲一個附註,'throw new Exception'在這裏可能是錯誤的。至少你想把'ex'視爲內在的例外。另一種選擇是'拋出;'重新拋出它而不重置堆棧,或者如果你沒有做任何事情,就不要捕獲它。 – Kobi 2010-06-16 15:27:59
感謝您的迴應,請不要擔心它將要更新的異常處理。這只是一個例子:-) – WestDiscGolf 2010-06-16 15:51:11