use*_*348 4 .net c# exception-handling
当WCF服务关闭时,我会像这样捕获这个异常.
public List<ProjektyEntity> GetProjekty()
{
try
{
return this.channel.GetProjekty();
}
catch (EndpointNotFoundException exception)
{
//what to do at this point ?
}
}
Run Code Online (Sandbox Code Playgroud)
但是我不知道在catch块中要做什么.我只能返回一个类型的对象List<ProjektyEntity>我想给用户写一条消息,比如"服务已关闭"我的表示层是ASP.NET MVC.这种情况有什么策略吗?
Mar*_*ers 14
有一个简单的规则:如果您不知道如何处理异常,请不要抓住它.
捕获它并重新调整null或空列表将是你可以做的最糟糕的事情,因为它很难调试错误的来源,甚至根本就没有错误.如果你这样做,你将让开发人员拔掉头发.
捕获异常并重新抛出异常throw e;也是因为丢失了原始堆栈.使用重新抛出throw;是OK有时候,如果你有特殊的清理,你只需要,如果有一个错误的事情.通常情况并非如此.如果你有清理应该做的是否有错误,它属于finally子句.
所以一般情况下除非你能从错误中恢复,否则只需让异常传播给调用者.这就是异常的设计方式.
有几次您可能想要捕获异常以添加更多信息(例如,用于记录),在这种情况下,您应该确保使用a InnerException来避免丢失原始信息:
try
{
foo(bar);
}
catch (Exception e)
{
throw new FooException("Foo failed for " + bar.ToString(), e);
}
Run Code Online (Sandbox Code Playgroud)
但总的来说,除非你有充分的理由,否则最好不要这样做.这样做可以防止用户捕获特定类型的异常 - 它们将捕获您的异常,然后他们需要打开InnerException的类型.不好玩.只是让调用者看到原始异常.
我在这里可以看到几个选项.确定哪个合适可能取决于应用程序.
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |