我有很多方法需要从外部API获取数据并以相同的方式管理错误。
所以我想避免在所有方法中使用相同的代码......
我尝试使用Func,我将此代码用于没有参数的方法。
方法:
private async Task<T> ExecuteAction<T>(Func<Task<T>> action) where T : class
{
var securityException = false;
object response = null;
try
{
response = await action();
}
catch (MySecurityException)
{
securityException = true;
}
if (securityException)
{
// new login
response = await action();
}
else if (// other condition)
{
//Do something
}
return (T) response;
}
方法调用:
Func<Task<string>> action = myApiClient.Action;
var test = await ExecuteAction<string>(action);
如何使用参数做同样的事情?类似的东西:
Func<Task<string>> action = myApiClient.Action(parameter1, parameter2);
是否有一种简单的方法可以修改我的方法来添加参数?
答案 0 :(得分:7)
只需使用lambda表达式:
Func<Task<string>> action = ()=> myApiClient.Action(parameter1, parameter2)
并将其传递给您已有的方法。