c# - C# 中异常的高阶函数方法

标签 c# exception

大家好,我正在考虑将方法 block 作为参数传递给内置异常处理的帮助程序类,但这是直观的事情之一,我想提交它以供批评、见解或建议。

我想预先指出,这不是我进行所有异常处理的方式,但在某些情况下我发现这种结构更“可读”。

例如,我有一个场景,我正在显示预览图像,但如果失败(这是我正在预览图像的真实场景,并且无法预览某些 GIF/BMP 格式),这只是我的场景显示替代图像而不是预览。 try/catch 代码块如下所示:

  try
  {
        alternatePreviewImage.SetSource(fs);
  }
  catch (Exception ex) {
        requiresSpecialPreview = false;
        previewImage = new BitmapImage(new Uri("Images/NoPreviewAvailable.png", UriKind.Relative));
  }

因此,我将利用一个带有方法参数的辅助类,使其看起来像这样:

  if(!ErrorHelper.RunWithSuccessNotify(()=> alternatePreviewImage.SetSource(fs))){
        requiresSpecialPreview = false;
        previewImage = new BitmapImage(new Uri("Images/NoPreviewAvailable.png", UriKind.Relative));                             
  }

ErrorHelper.RunWithSuccessNotify 非常简单:

public static bool RunWithSuccessNotify(Action code) {
    bool success = true;
    try
    {
        code();
    }
    catch (Exception ex)
    {
        success = false;
    }

    return success;
}

让我再次强调,它对于这些低影响场景以及我可能能够抑制异常的其他场景很有用:

public static void RunWithErrorSuppression(Action code) {
    try
    {
        code();
    }
    catch (Exception ex)
    {
        // pass
    }
}

该方法也可以更详细,以允许捕获异常:

    public static void ExecuteWithLogging(Action code, Action<Exception> handles) {
        try
        {
            code();
        }
        catch (Exception ex)
        {
            handles(ex);
        }
    }

那么这套集中异常处理的策略有什么想法呢?如果这是一个糟糕的方向,是否有具体原因可能最终会给我带来麻烦?

最佳答案

我使用这种方法遇到的主要问题是捕获异常通常被认为是错误的形式。如果有某种方法可以指定要捕获哪种类型的异常,我可能会购买它,但我相信必须在编译时指定。我也不太愿意捕获所有异常并重新抛出不匹配的异常。

请记住,当您捕获异常时,您本质上是在说您可以以某种有意义的方式处理该错误。显然,上面的代码无法处理 StackOverflowExceptionMissingMethodException

关于c# - C# 中异常的高阶函数方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1603798/

相关文章:

c# - 为什么要使用流畅的界面?

c# - 异常的目的是什么?

c# - 从 XML 生成 C# 类

python - 我想返回一个值并引发异常,这是否意味着我做错了什么?

asp.net - 支付网关可能出现的问题

c# - 创建接收参数的方法的最佳方式

C#:如果一个类有两个构造函数,那么这些构造函数共享一些代码的最佳方式是什么?

php - PHP 中内置了哪些异常子类?

Java 使用 JNI 导入使用第 3 方功能的 C 中的共享库 (Python.h)

ios - 在WKWebview中突出显示文本时发生JavaScript异常