Я вижу необходимость скопировать и вставить следующий код обработки ошибок несколько раз.Какие у меня варианты при работе с оператором Catch?
При этом я потеряю ценную информацию в процессе?(пример: переупакованы ли исключения в другое исключение или потеря информации о стеке)
Как кто-то может определить разницу между «throw» в myAbstractClass и одним в методе Select ниже?
Вот пример кода, который я хочу скопировать
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, сеть или файл, но не аутентификация)
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...
}
Но с помощью приведенного выше кода мне не ясно, как конечный пользователь может включить или переопределить мои методы обработки событий.