我看到需要复制并粘贴以下错误处理代码几次。在Catch声明中使用什么选项?可以在另一个类,程序集或抽象类中处理异常吗?
在这样做的过程中,我会失去有价值的信息吗? (例如:在另一个异常中重新包装异常,或者丢失堆栈信息)
有人如何判断myAbstractClass中的“throw”和下面的Select方法中的“throw”之间的区别?
下面是示例代码,我想复制
public class StackUserDataSource : AbstractEnhancedTableDataSource<StackUserDataServiceContext>
{
//.. stuff
public IEnumerable<StackUserDataModel> Select()
{
try
{
var results = from c in _ServiceContext.StackUserTable
select c;
var query = results.AsTableServiceQuery();
var queryResults = query.Execute();
return queryResults;
}
catch (StorageClientException e)
{
// Todo: consider sticking this in another central location
switch (e.ErrorCode)
{
case StorageErrorCode.AccessDenied:
break;
case StorageErrorCode.AccountNotFound:
break;
case StorageErrorCode.AuthenticationFailure:
break;
// ... Yadda yadda, handle some exceptions, not others.. this is a demo.
case StorageErrorCode.TransportError:
break;
default:
break;
}
throw;
}
}
更新:
我怀疑这是可能的,但我可以动态地捕捉和过滤器例外的外部库?这个概念是这样的
try
{
var results = from c in _ServiceContext.StackUserTable
select c;
var query = results.AsTableServiceQuery();
var queryResults = query.Execute();
return queryResults;
}
catch (MyExternalExceptionHelperDLL e)
{
// all exceptions referenced in MyExternalHelper are passed below
MyExternalExceptionHelper.ProcessException(e);
}
catch (exception)
{
}
因为它可能不是可能的MyExternalExceptionHelperDLL动态挑选什么的听(即SQL,VS网络VS文件,但不验证)
try
{
var results = from c in _ServiceContext.StackUserTable
select c;
var query = results.AsTableServiceQuery();
var queryResults = query.Execute();
return queryResults;
}
catch (exception e)
{
MyExternalExceptionHelper.ProcessException(e);
// The problem is that I don't know how to catch exceptions thrown from that static method above,
// or how to override that exception handling...
}
但使用上面的代码,我不清楚最终用户如何选择或重写我的事件处理方法。
可以拨打一个'catch'块就像其他地方的辅助方法...... – mellamokb
是否有一个原因,长期'之开关语句什么也不做? –
谢谢@mellamokb,我刚刚更新了这个问题...... – LamonteCristo