Существует в основном два набора возможных решений: с использованием исключений и без.
С использованием исключений, Я бы рекомендовал просто дать ему всплыть , как я уже говорил в комментариях.
Тогда вы можете сбросить:
try {
// exception here
}
catch(Exception ex)
{
throw;
}
Вы можете обернуть:
try {
// exception here
}
catch(Exception inner)
{
throw new MyCustomException( "Some custom message", inner);
}
Кстати: вообще не очень хорошая идея ловить исключения. Большую часть времени вы захотите поймать определенных исключений, которые вы на самом деле можете обработать.
Другой класс решений без исключений:
Возвращаемое значение:
public static bool Subfunction()
{
bool success = true;
try
{
//some code
//some code
}
catch (Exception ex)
{
success = false;
}
return success;
}
или
private static readonly int DONOTUSEMAGICNUMBERS = 1;
public static int Subfunction()
{
int success = 0;
try
{
//some code
//some code
}
catch (Exception ex)
{
success = DONOTUSEMAGICNUMBERS;
}
return success;
}
Особенно с "C-Guys" в команде, вы можете наткнуться на это. (Без обид - только мой опыт) * 1026 *
Или с государственным объектом ...
public static void Mainfunction()
{
try
{
//some code
//some code
ISuccessIndicator success = new ISIImplementation();
Subfunction( success );
if( !succes.HasException )
{
ThirdFunction();
}
}
catch(Exception ex)
{
//write to log
}
}
public static void Subfunction( ISuccessIndicator result )
{
try
{
//some code
//some code
}
catch (Exception ex)
{
result.HasException=true;
result.Exception = ex;
}
}
public interface ISuccessIndicator
{
Exception Exception {get; set;}
bool HasException {get; set;}
}
И если вы действительно сумасшедший, вы могли бы ...
public static void Mainfunction()
{
try
{
//some code
//some code
Exception ex = null;
Subfunction( ref ex );
if( ex == null )
{
ThirdFunction();
}
}
catch(Exception ex)
{
//write to log
}
}
public static void Subfunction( ref Exception outEx )
{
try
{
//some code
//some code
}
catch (Exception ex)
{
outEx = ex;
}
}
Пожалуйста, обратите внимание, что я никоим образом не рекомендовал бы использовать последнее. Но это возможно ... и ОП запросил возможности.
Отказ от ответственности: все фрагменты не проверены. Кто найдет ошибки, может их оставить (но, пожалуйста, напишите комментарий, чтобы я мог их исправить).