2

以下面的 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();
    }

以下块仅作为 C# 语法糖存在,以在源代码中实施额外的变量范围层,如本 SO Question 中所述

        {
            var i = r.Next(); ;
            Console.WriteLine("i = {0}", i);
        }

我通过使用 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();
    }

那么这个 C# 构造有名称吗?如果是这样,那是什么?

4

2 回答 2

6

它被称为语句块

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

于 2012-07-08T22:20:57.767 回答
2

我不知道在该特定上下文中使用的 { } 的特定名称,但他们引入的事物的名称称为嵌套范围(还可以参考goto 文档中嵌套范围的用法)。

于 2012-07-08T22:20:46.803 回答