对在C#中抛出异常感到困惑

时间:2013-09-27 04:01:31

标签: c# exception exception-handling try-catch

我使用try/catchthrow来处理异常。所以我使用try/catch使用捕获错误,其中包括文件不可用等问题,然后在throw包含错误值时使用text

我的Main()的基本布局如下:

   while ((line = sr.ReadLine()) != null)
        {
            try
            {
                //get the input from readLine and saving it

                if (!valuesAreValid)
                {
                    //this doesnt make the code stop running
                    throw new Exception("This value is not wrong"); 

                 } else{
                 //write to file
                 }
            }
            catch (IndexOutOfRangeException)
            {
               //trying to throw the exception here but the code stops

            }

            catch (Exception e)
            {

               //trying to throw the exception here but the code stops 


            }

因此,如果您注意到我在 try/catch内部抛出异常并且不会停止程序,而在尝试将Exception抛出catch语句时,代码会停止。有没有人知道如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

如果您在catch内引发异常,则catch不会处理该异常。如果没有进一步catch,您将收到未处理的异常。

try {
    try {
        throw new Exception("example");
    } catch {
        throw new Exception("caught example, threw new exception");
    }
} catch {
    throw new Exception("caught second exception, throwing third!");
    // the above exception is unhandled, because there's no more catch statements
}

答案 1 :(得分:2)

默认情况下,除非您在catch块中重新抛出异常,否则该异常将停止在捕获它的“catch”块向上传播。这意味着该程序不会退出。

如果您不想捕获异常,并希望程序退出,您有两个选择:   - 删除'异常'的catch块   - 在它的catch块中重新抛出异常。

catch (Exception e)
{
   throw e; // rethrow the exception, else it will stop propogating at this point
}

通常,除非您对异常有一些逻辑响应,否则请避免捕获它。这样您就不会“隐藏”或抑制导致程序错误的错误。

此外,MSDN文档是理解异常处理的好地方:http://msdn.microsoft.com/en-us/library/vstudio/ms229005%28v=vs.100%29.aspx

答案 2 :(得分:0)

while ((line = sr.ReadLine()) != null)
        {
            try
            {
                //get the input from readLine and saving it

                if (!valuesAreValid)
                {
                    //this doesnt make the code stop running
                    throw new Exception("This value is not wrong"); 

                 } else{
                 //write to file
                 }
            }
            catch (IndexOutOfRangeException)
            {
               //trying to throw the exception here but the code stops

            }

            catch (Exception e)
            {

               //trying to throw the exception here but the code stops 
             throw e; 

            }

答案 3 :(得分:0)

我不确定你的意思是“停止程序”。如果您不处理异常,程序将停止,但您的代码正在处理通过catch(异常e)块抛出的异常。 或者你的意思是你想要退出while循环,在这种情况下你可以使用 break