加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#常见错误处理

发布时间:2020-12-16 00:12:30 所属栏目:百科 来源:网络整理
导读:我正在编写一个Web服务,它是供应商Web服务的包装器,并且具有一系列相当详细的catch语句,用于调用供应商Web服务方法.我正在处理两种或三种类型的异常(System.Web.Services.Protocols.SoapException,System.ApplicationException,System.Exception …) 我刚刚
我正在编写一个Web服务,它是供应商Web服务的包装器,并且具有一系列相当详细的catch语句,用于调用供应商Web服务方法.我正在处理两种或三种类型的异常(System.Web.Services.Protocols.SoapException,System.ApplicationException,System.Exception …)

我刚刚意识到他们的两个Create方法和Update方法之间的大多数错误是相同的.

是否有任何聪明的方法可以跨多个方法共享完全相同的错误处理程序?
我开始只编写一个常用方法,但后来意识到我必须为我正在处理的每种类型的异常编写至少一个常用方法.如果我能以完全相同的方式处理所有这些,那将是很棒的.

这是一个具有已建立接口的Web服务.在我写这篇文章时大声思考,我想我可以在web方法中尽可能少地编写代码,然后他们可以调用共享方法?只是想确保我没有错过一个明显的伎俩.

谢谢,
尼尔

解决方法

您可以创建一个函数,该函数接受Delegate,然后使用lambda表达式(C#3)或匿名方法调用它.该函数可以在try块中调用传入的Delegate并处理异常.

private T CallWebService<T>(Func<T> function)
{
    try
    {
        return function();
    }
    catch (SoapException e)
    {
        // handle SoapException
    }
    catch (ApplicationException e)
    {
        // handle ApplicationException
    }
    // catch and handle other exceptions    
}

public ReturnType CallCreate(ParamType param)
{
    return CallWebService(() => WebService.InvokeCreate(param));
}

public ReturnType CallUpdate(ParamType param)
{
    return CallWebService(() => WebService.InvokeUpdate(param));
}

如果各个方法需要处理自己的特定异常,则可以将其添加到CallCreate和CallUpdate方法中.

上面的示例使用lambda表达式.使用匿名方法的CallCreate相当于:

public ReturnType CallCreate(ParamType param)
{
    return CallWebService<ReturnType>(delegate()
    { 
        return WebService.InvokeCreate(param) 
    });
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读