Как я могу принудительно выполнить сборку 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();