Я полностью осознаю, что то, что я собираюсь спросить, не является хорошей практикой ... но:
Допустим, у меня есть класс, содержащий функцию, которую я хочу всегда возвращать значение, но сохраняю любые исключения, которые могут возникнуть для дальнейшей обработки. Что-то вроде:
public Exception _error { get; set; }
public bool IsValid()
{
try
{
//do something here to cause exception
return true;
}
catch (Exception ex)
{
_error = ex;
return false;
}
}
Теперь, когда я сохранил исключение, возможно ли вообще вызвать исключение из внешнего метода, сохраняя при этом как исходную трассировку стека, так и тип исключения?
throw _error; //lose stack trace
throw new Exception("", _error) //lose type
Спасибо, что посмотрели или ответили.
EDIT:
Благодаря некоторым дополнительным моментам, я понимаю, что приведенная ниже идея только отбирает информацию и на самом деле не добавляет и не упрощает ситуацию. Еще раз спасибо всем.
После размышления над ответом и комментариями Питера, я теперь задаюсь вопросом, могло ли бы создание класса Исключения оболочки, подобного ниже, быть частичным решением. Это переопределяет как можно большую часть исключения, чтобы новое исключение выглядело как его неисключительное исключение, включая трассировку стека ... грязно, я знаю, но интересно:
public class ExceptionWrapper : Exception
{
private Exception _innerException;
public ExceptionWrapper(Exception ex) : base("", ex)
{
_innerException = ex;
this.Source = ex.Source;
this.HelpLink = ex.HelpLink;
}
public override string StackTrace
{
get
{
return _innerException.StackTrace;
}
}
public override System.Collections.IDictionary Data
{
get
{
return _innerException.Data;
}
}
public override string Message
{
get
{
return _innerException.Message;
}
}
public new Exception InnerException
{
get
{
return _innerException.InnerException;
}
}
}