在BLL课程中,我写道:
Private List<T> GetData(string a, string b)
{
TryAction(()=>{
//Call BLL Method to retrieve the list of BO.
return BLLInstance.GetAllList(a,b);
});
}
在BLL基类中,我有一个方法:
protected void TryAction(Action action)
{
try
{
action();
}
catch(Exception e)
{
// write exception to output (Response.Write(str))
}
}
如何将TryAction()
方法与泛型返回类型一起使用?
请有个建议。
答案 0 :(得分:7)
您需要使用Func来表示将返回值的方法。
以下是一个例子
private List<int> GetData(string a, string b)
{
return TryAction(() =>
{
//Call BLL Method to retrieve the list of BO.
return BLLInstance.GetAllList(a,b);
});
}
protected TResult TryAction<TResult>(Func<TResult> action)
{
try
{
return action();
}
catch (Exception e)
{
throw;
// write exception to output (Response.Write(str))
}
}
答案 1 :(得分:6)
Action
是一个具有void
返回类型的委托,因此如果您希望它返回一个值,则不能。
为此,您需要使用Func
委托(有很多 - 最后一个类型参数是返回类型)。
如果您只想让TryAction
返回泛型类型,请将其转换为通用方法:
protected T TryAction<T>(Action action)
{
try
{
action();
}
catch(Exception e)
{
// write exception to output (Response.Write(str))
}
return default(T);
}
根据您的具体操作,您可能需要使用通用方法和Func
委托:
protected T TryAction<T>(Func<T> action)
{
try
{
return action();
}
catch(Exception e)
{
// write exception to output (Response.Write(str))
}
return default(T);
}
答案 2 :(得分:0)
您应该考虑使用Func委托而不是Action委托。