У меня есть код, который пытается преобразовать тип. Если это не удается, я хочу попробовать что-то еще, и если это также не удается, а затем сбросить исходное исключение, предпринятое при первом преобразовании. Проблема в том, что единственный способ повторного броска, который я знаю, состоит в том, чтобы 'throw;
' сидел в конце блока захвата. Что происходит, когда я хочу, чтобы повторный бросок происходил только из другого блока catch?
try
{
valueFromData = Convert.ChangeType(valueFromData, pi.PropertyType);
}
catch(InvalidCastException e)
{
Debug.WriteLine(String.Concat("Info - Direct conversion failed. Attempting to convert using String as an intermidiate type."));
try { valueFromData = Convert.ChangeType(valueFromData.ToString(), pi.PropertyType); }
catch { throw e; }
}
Как вы можете видеть выше, я должен использовать 'throw e;
', который сбрасывает стек вызовов.
Единственный обходной путь, который у меня пока есть, (imo) брутто:
bool handled = true;
...
catch { handled = false; }
if( !handled ) throw;