我有一个需要抛出异常的函数,但我希望它将该异常抛出到我调用该函数的行:
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
}
答案 0 :(得分:1)
所描述的行为并非严格可行,但解决所需的效果是。
您遇到的问题是,在Visual Studio中,执行暂停,我们会看到来自最可用位置的异常以及调试信息。对于框架方法,这意味着方法调用,即使异常被抛出几个更深的调用。由于异常来自您正在调试的同一个项目,因此您将始终拥有实际throw
行的调试信息,因此您始终会到达该行。
这里的解决方法是利用VS中的Call Stack
窗口,该窗口将包括触发错误的方法调用的几行,双击它将带来您想要的位置,包括调用时的所有局部变量。这类似于框架异常行为,因为如果查看堆栈跟踪,则会将几个帧标记为" external"因为他们没有调试信息。
编辑:要添加有关try
和catch
行为的一些信息,catch
将响应任何尚未捕获的异常 - 因此,即使如果在调用堆栈展开到try
块时没有处理它,则会抛出几个更深的调用异常,它会点击相应的catch
块(如果有的话)一个)。
答案 1 :(得分:1)
经过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
}
答案 2 :(得分:-1)
这个怎么样?
public static int NewInt
{
get
{
throw new Exception("Number not found");
}
}
static void Main(string[] args)
{
int a = NewInt;
}