c# - 返回值的方法不能传递给异常处理程序

标签 c# .net winforms exception mvp

我在方法中集中处理异常 (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/

相关文章:

c# - 在 LINQ 中左加入 OrderBy

c# - 如何管理在运行时创建的 WinForms 按钮的委托(delegate)?

c# - 如何从另一个窗体在窗体图片框上绘制矩形

c# - 按文本内容自动调整面板大小

c# - 我将如何以编程方式访问此 WPF XAML 资源?

c# - 我可以嵌套 Parallel.Invoke 方法吗?

c# - 如何创建 5 个按钮并动态分配各个点击事件?

c# - 如何在 asp.net 中获取文件 crc/校验和

c# - INotifyPropertyChanging 接口(interface)如何帮助限制内存消耗

c# - 文本框控件数据可视化验证的最佳实践