C# 为什么Visual Studio会将Func参数的异常报告为未处理?
为什么在调试模式下运行时,此示例中引发的异常被VisualStudio报告为未经处理C# 为什么Visual Studio会将Func参数的异常报告为未处理?,c#,exception-handling,delegates,C#,Exception Handling,Delegates,为什么在调试模式下运行时,此示例中引发的异常被VisualStudio报告为未经处理 public bool bar(string pVal) { throw new Exception("hello there"); } public void foo(Func<string,bool> pFunc) { try { pFunc("test"); } catch(Exception) { // should be caug
public bool bar(string pVal)
{
throw new Exception("hello there");
}
public void foo(Func<string,bool> pFunc)
{
try {
pFunc("test");
} catch(Exception) {
// should be caught
}
}
// passing bar to foo as a callable causes unhandled exception
foo(bar);
public bool bar(字符串pVal)
{
抛出新异常(“你好”);
}
公共失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效失效
{
试一试{
pFunc(“测试”);
}捕获(例外){
//应该被抓住
}
}
//将bar作为可调用项传递给foo会导致未处理的异常
富(巴);;
如果我在调试器中运行此命令,则bar()
中引发的异常将不会得到处理。在异常停止后,调试器将继续捕获
我在单元测试中编写了一个类似于
foo()
的函数来帮助自动化异常测试,但它不起作用。有人能解释一下为什么这不起作用,以及是否有可能修复它。我尝试了一个快速测试,异常被捕获:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
foo(bar);
Console.ReadKey();
}
public static bool bar(string pVal)
{
throw new Exception("hello there");
}
public static void foo(Func<string, bool> pFunc)
{
try
{
pFunc("test");
}
catch (Exception ex)
{
Console.WriteLine("Error: "+ ex.Message);
}
}
}
}
使用系统;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
富(巴);;
Console.ReadKey();
}
公共静态布尔条(字符串pVal)
{
抛出新异常(“你好”);
}
公共静态无效foo(Func pFunc)
{
尝试
{
pFunc(“测试”);
}
捕获(例外情况除外)
{
Console.WriteLine(“错误:+ex.Message”);
}
}
}
}
我尝试了一个快速测试,异常被捕获:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
foo(bar);
Console.ReadKey();
}
public static bool bar(string pVal)
{
throw new Exception("hello there");
}
public static void foo(Func<string, bool> pFunc)
{
try
{
pFunc("test");
}
catch (Exception ex)
{
Console.WriteLine("Error: "+ ex.Message);
}
}
}
}
使用系统;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
富(巴);;
Console.ReadKey();
}
公共静态布尔条(字符串pVal)
{
抛出新异常(“你好”);
}
公共静态无效foo(Func pFunc)
{
尝试
{
pFunc(“测试”);
}
捕获(例外情况除外)
{
Console.WriteLine(“错误:+ex.Message”);
}
}
}
}
您可以在Ctrl+Alt+E中关闭中断异常您可以在Ctrl+Alt+E中关闭中断异常当抛出异常时,调试器可能被设置为中断。这会导致你报告的行为。您可以将调试器配置为仅在用户处理的异常时中断 在“调试-->异常”下查看。下面是该对话框的外观:
您可以阅读更多关于它的信息。当抛出异常时,您的调试器可能会被设置为中断。这会导致你报告的行为。您可以将调试器配置为仅在用户处理的异常时中断 在“调试-->异常”下查看。下面是该对话框的外观:
您可以阅读更多有关它的信息。如何确定未处理异常的事实?@Tigran在Visual Studio调试器中。@Tigran噢,我可能错了。如果我在调试模式下运行单元测试,则异常会报告为未处理,但如果我在发行版中运行,则单元测试将作为异常运行。该异常在您的示例中被捕获。@MathewFoscarini:在单元测试中应该可以正常工作。调试器可能会因为某种原因认为它未被处理(尽管我觉得这很奇怪),但在运行测试时,它应该是正常的。这不一定是个好主意,但它应该会起作用。如何确定未处理异常的事实?@Tigran在Visual Studio调试器中。@Tigran噢,我可能错了。如果我在调试模式下运行单元测试,则异常会报告为未处理,但如果我在发行版中运行,则单元测试将作为异常运行。该异常在您的示例中被捕获。@MathewFoscarini:在单元测试中应该可以正常工作。调试器可能会因为某种原因认为它未被处理(尽管我觉得这很奇怪),但在运行测试时,它应该是正常的。这不一定是个好主意,但应该行得通。如果在VisualStudio的调试模式下运行,会出现相同的结果吗?我使用的是VisualStudio2010。在调试或发布模式中,行为是相同的。你的问题在别的地方。如果在VisualStudio的调试模式下运行,会出现相同的结果吗?我正在使用Visual Studio 2010。在调试或发布模式下,行为是相同的。你的问题在别处