Is there a difference between quot;throwquot; and quot;throw exquot;?(“投掷和“投掷有区别吗?和“扔前?)
问题描述
有一些帖子询问这两者之间的区别是什么.
(我为什么还要提这个……)
There are some posts that asks what the difference between those two are already.
(why do I have to even mention this...)
但我的问题有所不同,我在另一个错误上帝般处理方法中调用throw ex".
But my question is different in a way that I am calling "throw ex" in another error god-like handling method.
public class Program {
public static void Main(string[] args) {
try {
// something
} catch (Exception ex) {
HandleException(ex);
}
}
private static void HandleException(Exception ex) {
if (ex is ThreadAbortException) {
// ignore then,
return;
}
if (ex is ArgumentOutOfRangeException) {
// Log then,
throw ex;
}
if (ex is InvalidOperationException) {
// Show message then,
throw ex;
}
// and so on.
}
}
如果 尝试 &在 ,然后我将使用 Main 中使用了 catchthrow; 重新抛出错误.但是在上面的简化代码中,所有的异常都经过HandleException
If try & catch were used in the Main, then I would use throw; to rethrow the error.
But in the above simplied code, all exceptions go through HandleException
throw ex; 在 HandleException 内部调用时是否与调用 throw 效果相同?
Does throw ex; has the same effect as calling throw when called inside HandleException?
推荐答案
是的,有区别;
throw ex重置堆栈跟踪(因此您的错误似乎源自HandleException)throw不会 - 原始违规者将被保留.
throw exresets the stack trace (so your errors would appear to originate fromHandleException)throwdoesn't - the original offender would be preserved.
static void Main(string[] args)
{
try
{
Method2();
}
catch (Exception ex)
{
Console.Write(ex.StackTrace.ToString());
Console.ReadKey();
}
}
private static void Method2()
{
try
{
Method1();
}
catch (Exception ex)
{
//throw ex resets the stack trace Coming from Method 1 and propogates it to the caller(Main)
throw ex;
}
}
private static void Method1()
{
try
{
throw new Exception("Inside Method1");
}
catch (Exception)
{
throw;
}
}
这篇关于“投掷"和“投掷"有区别吗?和“扔前"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:“投掷"和“投掷"有区别吗?和“扔前&qu
基础教程推荐
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- WPF 模态进度窗口 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
