以下是取自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提交了反馈,指出了文档中的错误。
答案 0 :(得分:22)
这是MSDN网站上的错误。正如编译器所建议的那样,您应该使用when
而不是if
。