У меня есть код, который пытается преобразовать тип. Если он терпит неудачу, я хочу попробовать что-то еще, и если это также не удастся, повторите первоначальное исключение, предпринятое первым преобразованием. Проблема заключается в том, что единственный способ, которым я знаю, - это "throw;
", сидящий в конце блока catch. Что происходит, когда я хочу, чтобы ретроп произошел из другого блока 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;