【发布时间】:2016-02-22 02:58:27
【问题描述】:
以下是取自MSDN, try-catch (C# Reference)的例子
catch (ArgumentException e) if (e.ParamName == "…")
{
}
他们也说
使用 catch 参数是过滤要处理的异常的一种方法。您还可以使用谓词表达式进一步检查异常以决定是否处理它。如果谓词表达式返回 false,则继续搜索处理程序。
异常过滤器优于捕获和重新抛出(如下所述),因为过滤器不会损坏堆栈。如果稍后的处理程序转储堆栈,您可以看到异常最初来自哪里,而不仅仅是它被重新抛出的最后一个位置。异常过滤器表达式的一个常见用途是日志记录。您可以创建一个始终返回 false 并输出到日志的谓词函数,您可以在异常发生时记录它们,而无需处理它们并重新抛出。
我的代码:
static bool LogFunction(System.Exception ex)
{
System.Console.WriteLine("Writing to logfile: {0}", ex.Message);
return false;
}
static void Main(string[] args)
{
try
{
throw new System.ArgumentException("The exception message...");
}
catch(System.Exception ex) if (LogFunction(ex))
{
System.Console.WriteLine("This will not be executed, ever!");
}
catch(System.ArgumentException ex)
{
// ....
}
}
现在,编译器不会编译这个 (csc.exe),并给出以下错误消息:
error CS1003: Syntax error, 'when' expected
编辑:编译器为该行引发错误
error CS1003: Syntax error, 'when' expected
我做错了什么?
谢谢。
编辑:我向 MSDN 提交了反馈,指出了文档中的错误。
【问题讨论】:
-
捕获过滤器逻辑仅作为 VS2015 的一部分提供。这是您使用的版本吗?
-
据我记得这个 if 被替换为 'when' 关键字尝试交换 if to when
-
你的
if不应该换成when这个词吗? -
胜利的文档错误!
-
嗯。错误也很明显;)