C# catch(DataException) - 没有定义变量

标签 c# catch-block

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/

相关文章:

c# - 如何在 C# 中实例化属性的新实例

java - 捕获多个异常并抛出新的异常列表

c# - Try/Catch——我怎么知道在奇怪/复杂的情况下要捕捉什么?

error-handling - 如何使用catch将屏幕上的错误捕获到TCL中的变量中

javascript - 不明白 anymodel.findOne.then().catch() 的工作原理

c# - 使用 C# 代码在 asp.net 上搜索按钮

c# - ASP.NET Core 1.0 POST IEnumerable<T> 到 Controller

c# - 在 Visual Studio 模板中更改项目文件夹路径

c# - 使用语句和 Entity Framework

node.js - 对多个 then 方法使用相同的 catch block