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

本文关键字:抛出异常 对在 | 更新日期: 2023-09-27 18:32:55

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

我的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 抛出了一个异常,并且这不会停止程序,而当尝试在 catch 语句中抛出Exception时,代码会停止。有人知道如何解决这个问题吗?

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

如果你在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
}

默认情况下,除非您在 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

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

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