C# 向调用者抛出异常
C# throw exception to caller
我有一个需要抛出异常的函数,但我希望它将该异常抛出到我调用该函数的行:
static int retrieveInt()
{
int a = getInt();
if(a == -1)
throw new Exception("Number not found"); //The runtime error is pointing to this line
return a;
}
static void Main(string[] args)
{
int a = retrieveInt(); //The runtime error would be happening here
}
所描述的行为严格来说是不可能的,但可以通过变通来达到预期的效果。
您 运行 遇到的问题是,在 Visual Studio 中,执行暂停,我们从最可用的位置看到带有调试信息的异常。对于框架方法,这意味着方法调用,即使在更深层次的调用中抛出了异常。由于异常来自您正在调试的同一个项目,因此您将始终拥有实际 throw
行的调试信息,因此您将始终到达该行。
这里的解决方法是利用 VS 中的 Call Stack
window,这将在触发错误的方法调用下方包含几行,双击它会带您到哪里你想要的,包括调用时的所有局部变量。这类似于框架异常行为,因为如果您查看堆栈跟踪,有几个帧被标记为 "external" 因为它们没有调试信息。
编辑: 要添加一些关于 try
和 catch
行为的信息,catch
将响应任何尚未捕获的异常- 因此,即使异常被抛出更深的几个调用,如果在调用堆栈展开到你的 try
块时它没有被处理,它会命中适当的 catch
块(如果有一个).
这个怎么样?
public static int NewInt
{
get
{
throw new Exception("Number not found");
}
}
static void Main(string[] args)
{
int a = NewInt;
}
经过 2 小时的搜索,我找到了问题的答案。要执行我想要的操作,需要在函数之前使用 [System.Diagnostics.DebuggerStepThrough]:
[System.Diagnostics.DebuggerStepThrough]
static int retrieveInt()
{
int a = getInt();
if(a == -1)
throw new Exception("Number not found"); //The runtime error will not be here
return a;
}
static void Main(string[] args)
{
int a = retrieveInt(); //The runtime error happens now here
}
我有一个需要抛出异常的函数,但我希望它将该异常抛出到我调用该函数的行:
static int retrieveInt()
{
int a = getInt();
if(a == -1)
throw new Exception("Number not found"); //The runtime error is pointing to this line
return a;
}
static void Main(string[] args)
{
int a = retrieveInt(); //The runtime error would be happening here
}
所描述的行为严格来说是不可能的,但可以通过变通来达到预期的效果。
您 运行 遇到的问题是,在 Visual Studio 中,执行暂停,我们从最可用的位置看到带有调试信息的异常。对于框架方法,这意味着方法调用,即使在更深层次的调用中抛出了异常。由于异常来自您正在调试的同一个项目,因此您将始终拥有实际 throw
行的调试信息,因此您将始终到达该行。
这里的解决方法是利用 VS 中的 Call Stack
window,这将在触发错误的方法调用下方包含几行,双击它会带您到哪里你想要的,包括调用时的所有局部变量。这类似于框架异常行为,因为如果您查看堆栈跟踪,有几个帧被标记为 "external" 因为它们没有调试信息。
编辑: 要添加一些关于 try
和 catch
行为的信息,catch
将响应任何尚未捕获的异常- 因此,即使异常被抛出更深的几个调用,如果在调用堆栈展开到你的 try
块时它没有被处理,它会命中适当的 catch
块(如果有一个).
这个怎么样?
public static int NewInt
{
get
{
throw new Exception("Number not found");
}
}
static void Main(string[] args)
{
int a = NewInt;
}
经过 2 小时的搜索,我找到了问题的答案。要执行我想要的操作,需要在函数之前使用 [System.Diagnostics.DebuggerStepThrough]:
[System.Diagnostics.DebuggerStepThrough]
static int retrieveInt()
{
int a = getInt();
if(a == -1)
throw new Exception("Number not found"); //The runtime error will not be here
return a;
}
static void Main(string[] args)
{
int a = retrieveInt(); //The runtime error happens now here
}