我在方法中集中处理异常 (ExecuteAction(Action action)
)。当该方法返回值时将操作传递给该方法时,我遇到了问题。
在以下代码中我收到此错误:
由于“System.Action”返回 void,因此 return 关键字后面不能跟对象表达式
如何解决这个问题?
public decimal CalculateInstalment(decimal amount, int months)
{
this.ExecutAction(() =>
{
var result = amount / months;
return Math.Round(result, 2);
});
}
protected bool ExecutAction(Action action)
{
try
{
action();
return true;
}
catch (NullReferenceException e) { _MessageService.ShowErrorMessage(e); return false; ; }
catch (System.Data.SqlTypes.SqlTypeException e) { _MessageService.ShowErrorMessage(e); return false; }
catch (System.Data.SqlClient.SqlException e) { _MessageService.ShowErrorMessage(e); return false; }
catch (System.Exception e) { _MessageService.ShowErrorMessage(e); return false; };
}
最佳答案
正如其他人所说,Action 类型不返回值,但您可以引用外部变量。如果您想获取该值,请考虑这样的设置:
public decimal CalculateInstalment(decimal amount, int months)
{
var result = 0.0;
this.ExecutAction(() =>
{
result = Math.Round((amount / months), 2);
});
return result;
}
protected bool ExecutAction(Action action)
{
try
{
action();
return true;
}
catch (NullReferenceException e) { _MessageService.ShowErrorMessage(e); return false; ; }
catch (System.Data.SqlTypes.SqlTypeException e) { _MessageService.ShowErrorMessage(e); return false; }
catch (System.Data.SqlClient.SqlException e) { _MessageService.ShowErrorMessage(e); return false; }
catch (System.Exception e) { _MessageService.ShowErrorMessage(e); return false; };
}
关于c# - 返回值的方法不能传递给异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24314743/