C#函数中的一对括号的名称是什么,只存在于额外的范围内?

Jus*_*ing 2 .net c#

以下面的C#函数为例:

    static void Main(string[] args)
    {
        var r = new Random();
        {
            var i = r.Next(); ;
            Console.WriteLine("i = {0}", i);
        }

        var action = new Action(delegate()
            {
                var i = r.Next();
                Console.WriteLine("Delegate: i = {0}", i);
            });
        action();
    }
Run Code Online (Sandbox Code Playgroud)

以下块仅作为C#语法糖存在,以在源代码中强制执行额外的变量范围层,如本SO问题中所述.

        {
            var i = r.Next(); ;
            Console.WriteLine("i = {0}", i);
        }
Run Code Online (Sandbox Code Playgroud)

我通过使用ILSpy反编译生成的程序集来证明这一点,并得到:

    private static void Main(string[] args)
    {
        Random r = new Random();
        int i = r.Next();
        Console.WriteLine("i = {0}", i);
        Action action = delegate
        {
            int j = r.Next();
            Console.WriteLine("Delegate: i = {0}", j);
        }
        ;
        action();
    }
Run Code Online (Sandbox Code Playgroud)

那么这个C#构造有一个名字吗?如果是这样的话是什么?

dtb*_*dtb 6

它被称为语句块.

在例如if (...)a 之后的语句块和独立的语句块之间实际上没有区别.可以在任何可以使用语句的地方使用语句块.