.net 方法中的内部/嵌套范围

.net 方法中的内部/嵌套范围,.net,visual-studio,c#-4.0,scope,.net,Visual Studio,C# 4.0,Scope,我是一名C#开发人员,长期以来一直在使用这种语言 我想知道为什么langauge允许函数使用嵌套/内部作用域 以下是我的意思的一个例子: public int InnerScopeMethod() { int i = 10; //Inner Scope { int j = 100;//j will not work outside of the scope.

我是一名C#开发人员,长期以来一直在使用这种语言

我想知道为什么langauge允许函数使用嵌套/内部作用域

以下是我的意思的一个例子:

        public int InnerScopeMethod()
    {
        int i = 10;

        //Inner Scope
        {               
            int j = 100;//j will not work outside of the scope.
            i *= j;
        }//Scope Ends Here

    //j = 10 /// This Will Cause Error.
        return i;
    }
正如您所见,方法主体具有匿名或未命名的作用域,并且在C#4中是合法的

我想知道它为什么在这里?这仅仅是为变量提供小范围,还是有其他用途


任何帮助都将不胜感激。

问题应该是为什么“不会”在那里?换句话说,除非你想拥有一个内窥镜,否则你会用这样的花括号做什么呢?如果所有其他使用大括号的构造(即任何类型的循环或using语句)都有一个内部作用域,那么为什么单独使用大括号不会产生相同的效果呢

编辑:我想你真正的问题是:“有没有一次我会‘想’这样做?”

就我个人的经验而言,答案是否定的。但这并不意味着他们应该不遗余力地禁止这个已经存在的功能(由于它在各种构造中的使用),仅仅因为我永远不会使用它。

在C#中不必这样做(通常至少如此),但是(正如布兰登·摩尔所说)为什么不呢

一个原因可能是某些变量只有有限的有效时间,通过将该变量放入作用域,可以确保以后不会有人意外使用它们


此外,C#是基于C的,这种构造非常有用。在C中,变量只能在作用域的开始处声明,因此,如果您只需要在一个位置使用临时变量(例如循环索引),则可以在长方法中执行类似您编写的操作因此,对于那些习惯于为所有局部变量提供足够有限范围的非常小的单一责任函数的面向对象程序员来说,这种事情可能是无用的


然而,对于过程编程来说,能够在一个很长函数的一部分中限制某些变量的范围是非常有帮助的,因为它可以帮助您避免在同一范围内有太多的局部变量,如果您意外地使用了错误的变量或遇到命名冲突等,这可能会导致错误。

我想这不仅在C#4,但在以前的版本中也可以使用,甚至在大多数语言(如C)中也可以使用。顺便问一下,你有什么窍门。你能简单一点吗?我只想知道这种作用域的用途是什么,很多人也会将其称为“嵌套”作用域。关于你的问题,这有点像问,“为什么我的工具箱里有扳手?”答案是,当我需要使用扳手时,它很有用。scopes: