How Can I Force Execution to the Catch Block?

给你一囗甜甜゛ 提交于 2020-01-30 04:05:26

问题


I am wondering can try..catch force execution to go into the catch and run code in there?

here example code:

try {
    if (AnyConditionTrue) {
      // run some code
    }
    else {
      // go catch
    }
} catch (Exception) {
    // run some code here...
}

回答1:


Rather than throwing an Exception in the else, I would recommend extracting the code from your catch into a method and call that from your 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...

   }

But like Yuck has stated, I wouldn't recommend this. You should take a step back at your design and what you're looking to accomplish. There's a better way to do it (i.e. with normal conditional flow, instead of exception handling).




回答3:


Yes, you have to throw exception :

  try
  {
    throw new Exception("hello");
  }
  catch (Exception)
  {

     //run some code here...
  }



回答4:


if(conditiontrue)
{

}
else{
    throw new Exception();
}



回答5:


An effective way to throw an Exception and also jump to Catch as so:

try
{
   throw new Exception("Exception Message");
}
catch (Exception e)
{
   // after the throw, you will land here
}



回答6:


Yes, if you throw the exception that you intend to catch from within the try, it will be caught in the catch section.

I have to ask you why you would want to do this though? Exception handling is not meant to be a substitute for control flow.




回答7:


I think what you want is a finally block: http://msdn.microsoft.com/en-us/library/zwc8s4fz(v=vs.80).aspx

see this

try
 {
     doSomething();
 }
catch
 {
     catchSomething();
     throw an error
 } 
finally
 {
     alwaysDoThis();
 }

This is different if/when you do this:

try
 {
     doSomething(); 
 }
 catch
 {
     catchSomething(); 
     throw an error
 }
  alwaysDoThis();// will not run on error (in the catch) condition

the the this last instance, if an error occurs, the catch will execute but NOT the alwaysDoThis();. Of course you can still have multiple catch as always.




回答8:


As cadrel said, but pass through an Exception to provide more feedback, which will be shown in the innerException:

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);
}



回答9:


public class CustomException: Exception
{
     public CustomException(string message)
        : base(message) { }

}

//

if(something == anything)
{
   throw new CustomException(" custom text message");
}

you can try this




回答10:


You could throw an exception to force a catch

throw new Exception(...);



回答11:


why are you catching an exception? Why not just run the code in your "else" block? If you MUST do it that way, just throw a new exception

throw new Exception();



回答12:


If you want to "force" a try catch, just purposely do something stupid, like this:

List<string> cc = null;
foreach (string c in cc) {}


来源:https://stackoverflow.com/questions/9312411/how-can-i-force-execution-to-the-catch-block

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!