Как я могу принудительно выполнить сборку Catch Block?
Мне интересно, может ли try..catch
заставить выполнение перейти в catch
и запустить там код?
здесь пример кода:
try {
if (AnyConditionTrue) {
// run some code
}
else {
// go catch
}
} catch (Exception) {
// run some code here...
}
Ответы
Ответ 1
Вместо того, чтобы бросать исключение в else
, я бы рекомендовал извлечь код из вашего catch
в метод и вызвать его из вашего else
try
{
if (AnyConditionTrue)
{
MethodWhenTrue();
}
else
{
HandleError();
}
}
catch(Exception ex)
{
HandleError();
}
Ответ 2
try{
if (AnyConditionTrue){
//run some code
}
else{
throw new Exception();
}
}
catch(){
//run some code here...
}
Но, как сказал Yuck, я бы не рекомендовал этого. Вы должны сделать шаг назад на свой дизайн и то, что вы хотите выполнить. Там лучший способ сделать это (т.е. С нормальным условным потоком, а не с обработкой исключений).
Ответ 3
Да, вы должны исключить исключение:
try
{
throw new Exception("hello");
}
catch (Exception)
{
//run some code here...
}
Ответ 4
if(conditiontrue)
{
}
else{
throw new Exception();
}
Ответ 5
Да, если вы throw
исключение, которое вы намереваетесь catch
из try, оно попадет в раздел catch.
Я должен спросить вас, почему вы хотите это сделать? Обработка исключений не предназначена для замены потока управления.
Ответ 6
Я думаю, что вам нужен блок finally
: http://msdn.microsoft.com/en-us/library/zwc8s4fz (v = vs .80).aspx
см. это
try
{
doSomething();
}
catch
{
catchSomething();
throw an error
}
finally
{
alwaysDoThis();
}
Это другое, если/когда вы это делаете:
try
{
doSomething();
}
catch
{
catchSomething();
throw an error
}
alwaysDoThis();// will not run on error (in the catch) condition
этот последний экземпляр, если произошла ошибка, будет выполняться catch, но НЕ alwaysDoThis();
. Конечно, вы все равно можете иметь несколько catch
, как всегда.
Ответ 7
Как говорится в кадреле, но пропустите исключение, чтобы предоставить больше обратной связи, которая будет показана во внутреннем исключении:
try
{
if (AnyConditionTrue)
{
MethodWhenTrue();
}
else
{
HandleError(new Exception("AnyCondition is not true"));
}
}
catch (Exception ex)
{
HandleError(ex);
}
...
private void HandleError(Exception ex) {
throw new ApplicationException("Failure!", ex);
}
Ответ 8
Если вы хотите "заставить" попытку поймать, просто преднамеренно делайте что-то глупое, например:
List<string> cc = null;
foreach (string c in cc) {}
Ответ 9
public class CustomException: Exception
{
public CustomException(string message)
: base(message) { }
}
//
if(something == anything)
{
throw new CustomException(" custom text message");
}
ты можешь попробовать это
Ответ 10
Эффективный способ вызвать Exception
а также перейти к Catch
следующим образом:
try
{
throw new Exception("Exception Message");
}
catch (Exception e)
{
// after the throw, you will land here
}
Ответ 11
Вы можете создать исключение, чтобы заставить catch
throw new Exception(...);
Ответ 12
почему вы ловите исключение? Почему бы просто не запустить код в блоке "else"? Если вы ДОЛЖНЫ сделать это таким образом, просто введите новое исключение
throw new Exception();