c# - 错误处理整个类

标签 c# winforms error-handling try-catch

我继承了一个使用某些 3rd 方软件的 Winforms 程序,我看不到它的源代码。当调用此代码中的方法时,它应该连接到软件检查的阅读器。不幸的是,连接似乎不时断开,隐藏的功能导致程序静默失败。有没有一种方法可以处理对此类方法的每次调用,而无需对每个方法都使用 try catch?

该软件看起来像这样,使用了 Reader 类,以便我们可以跨多个模块访问同一个阅读器:

public class Reader
{
   private ThirdPartyReader thirdPartyReader;

   public ObjectReport QueryObjects()
   {
      return thirdPartyReader.QueryObjects();
   }

   public Settings QuerySettings()
   {
      return thirdPartyReader.QuerySettings();
   }
}

最佳答案

    public static class Extensions
    {
        public static TResult Try<TObject, TResult>(this TObject source, Func<TObject, TResult> method, string message = null)
        {
            try
            {
                return method(source);
            }
            catch (Exception e)
            {
                //Some Logging or whatever, optionally using the message parameter;
                return default(TResult);
            }
        }
    }

用法:
        var reader = new ThirdPartyReader();
        var objects = reader.Try(x => x.QueryObjects());
        var settings = reader.Try(x => x.QuerySettings(), "Error Reading Settings");

实际上并没有那么不同,因为您仍然需要执行 reader.Try(),而不仅仅是调用方法,但它是一种非常缩写的语法。

关于c# - 错误处理整个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15773004/

相关文章:

c# - Entity Framework 稍后在选择语句中使用已选择的值保存在新变量中

c# - ASP.NET MVC : How can I get my business rule validation to bubble up to the presentation layer?

c# - 没有注册类型 'Microsoft.AspNetCore.Mvc..."的服务

php - 计数器在 PHP 中触发了多少错误

c# - WebClient中如何获取Cookie的JSESSIONID

c# - Visual Studio 2012 为 Windows 10 构建应用程序?

c# - MessageBox.Show ("First Name,{0}", textBox1.Text);

c# - 使用 C# 在 Windows 7 中创建 Metro 风格的 Winform

c# - 为什么循环列表时此代码会抛出 'InvalidOperationException'?

android - 布局保持空白