static void Main(string[] args)
{
try
{
Console.WriteLine("No Error");
}
catch (DataException) /*why no compilation error in this line?*/
{
Console.WriteLine("Error....");
}
Console.ReadKey();
}
代码正在编译,没有任何错误。我不明白为什么 catch block 的第一行没有给出任何编译错误 -
捕捉(数据异常)
catch block 的DataException参数是一个类,它旁边应该有一个变量比如-
捕获(DataException d)
有人可以解释上述行为吗?
最佳答案
在 C# 5.0 spec 的第 8.10 节中,您会找到 try/catch
的语法定义(对格式表示歉意):
catch-clauses:
specific-catch-clauses general-catch-clauseopt
specific-catch-clausesopt general-catch-clause
specific-catch-clauses:
specific-catch-clause
specific-catch-clauses specific-catch-clause
specific-catch-clause:
catch
(
class-type identifieropt)
block
general-catch-clause:
catch
block
所以可以看到catch{}
,catch(Exception){}
和catch(Exception ex){}
都是有效的根据规范。
如果您没有在 catch block 中指定可选标识符,那么您将无法访问任何异常详细信息 - 但有时您不需要,所以最好不要声明您不需要的变量打算访问。
关于C# catch(DataException) - 没有定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32576522/