我已經寫了我最初的想法是爲我添加或可能在未來但許多小時的奮力和谷歌上搜索後添加任何方法的泛型方法執行器和錯誤處理程序,我已經使出去到論壇。單方法執行器和錯誤處理程序
目的:試圖讓個別錯誤處理掉的方法,以及如何在一個單一的方法的所有錯誤。 (希望這是有道理的)。
規範通用方法執行器和錯誤處理程序:
internal static Tuple<SystemMessage, object> ExecuteAndHandleAnyErrors<T,TArg1>(this object callingMethod, params object[] args)
{
dynamic methodToExecute;
if (callingMethod.GetType() == typeof(Func<T, TArg1>))
{
methodToExecute = (callingMethod as Func<T,TArg1>);
}
else
{
methodToExecute = (callingMethod as Action<T, TArg1>);
}
try
{
var result = methodToExecute.DynamicInvoke(args);
return new Tuple<SystemMessage, object>(null,result);
}
catch (Exception ex)
{
return new Tuple<SystemMessage, object>(new SystemMessage
{
MessageText = ex.Message,
MessageType = SystemMessage.SystemMessageType.Error
}, null);
}
}
//This is the code for a sample method:
internal QuestionAnswerSet LoadQuestions(DataWrapper dataWrapper)
{
var taskExecuter = new Func<DataWrapper, QuestionAnswerSet> (InternalDeserializeObject<QuestionAnswerSet>);
var questionAnswerSet = taskExecuter.ExecuteAndHandleAnyErrors<DataWrapper, QuestionAnswerSet>(dataWrapper);
return questionAnswerSet.Item2 as QuestionAnswerSet;
}
我的問題是:是否有可能,如果LoadQuestions方法倒下,我該如何捕獲錯誤和延遲錯誤處理的ExecuteAndHandleAnyErrors方法沒有手動添加try ... catch語句到LoadQuestions方法?
希望這是有道理的。
感謝ü。 查爾斯
看起來相當複雜。我使用lambda表達式做同樣的事情:'ExecuteAndHandleAnyErrors'具有唯一的參數'Action',並且將任何寫在lambda體中的代碼傳遞給它。 –
嗯,它應該可以工作,除了它會隱藏你想在'TargetInvocationException'裏捕獲的異常。你必須得到內在的例外才能得到「真正的」。 – Luaan