对在 C# 中抛出异常感到困惑
本文关键字:抛出异常 对在 | 更新日期: 2023-09-27 18:32:55
我使用try/catch
和throw
来处理异常。所以我正在使用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
时,代码会停止。有人知道如何解决这个问题吗?
如果你在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。