我继承了一个使用某些第三方软件的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/

10-17 02:38