Pau*_*sik 32 .net c# vb.net code-regions
注意:此"功能"现已添加到Visual Studio 2015中,但问题将持续一段时间,因为并非每个开发人员或每个开发工作室都会在它出现时立即访问最新和最好的IDE.
原始问题:
通常情况下,我不会"需要"甚至考虑一个荒谬的功能,例如方法体内的代码区域,但是:我正在重构VB.NET代码,其中方法通常运行500行或更多代码并且引用紧密耦合到代码违反了简单的重构,例如方法提取.
这就是为什么我认为我会在方法体中尝试区域.我只想组织短期代码.但IDE不允许我(导致编译器错误.)我只是好奇为什么?似乎代码区域不应该影响编译器,intellisense等.我错过了什么?(仍然使用VS 2005 btw.)
有趣:这似乎是语言特定的.它在C#中是可以的(我最初没有检查)但在VB.NET中没有.
public module MyModule
    Sub RunSnippet()
        dim a as A = new A (Int32.MaxValue )
        #region 
        Console.WriteLine ("")
        #end region
       ....
得到编译器错误,但C#版本没问题.
Ree*_*sey 19
我认为代码区域可能不会在方法体中得到支持,因为正如你所说的那样,它们将是(某种程度上)"荒谬的特征" - 但是,在C#中,这确实有效,至少在VS 2008和VS 2010中 -只是不在VB.NET中.
话虽这么说,我会避免它.将区域放在方法体中只会导致人们制作更大的方法(因为这是唯一值得的方法),这是应该避免的,而不是鼓励的.
如果您的代码:
无视简单的重构,例如方法提取
相反,我会集中精力进行"复杂"的重构(或者无论如何)来尝试分解这些方法.你的"四五百行"长方法在当前状态下根本无法维持.
就个人而言,我会让他们造成"痛苦" - 明显表明他们需要工作,正面和正中,直到你可以分解并重构部分.
Han*_*ant 16
它在Visual Basic 9.0语言规范的第3.3章中是明确的:
Region指令对源代码行进行分组,但对编译没有其他影响.整个组可以在集成开发环境(IDE)中折叠和隐藏,或者展开和查看.这些指令的特殊之处在于它们既不能在方法体内启动也不能终止
换句话说:你不能这样做,因为规范是这样说的.
至于它为什么这样被指定,我认为它与VB已经有的古老的IDE功能有关,只要我记得:工具+选项,文本编辑器,基本,VB特定,显示程序行分隔符.这只是一个猜测,可能不是一个非常好的.
更新:现在由Roslyn支持,首先包含在VS2015中.
Zer*_*er0 15
另一种简单的替代方法
您可以做的基本上是选择要添加的代码#Region #End Region并基本上单击:
Ctrl+ M,Ctrl+H
这基本上包装了代码.然后使它更整洁,更容易找到你可以评论代码.最终结果看起来像这样:

Car*_*doc 11
截至2015年11月:在Visual Studio 2015中,现在支持它,只需执行您喜欢的操作.
示例代码:
With frmMain
#region "A sample region in odd place"
  .show()
  .text = "Sample"
#end region
End With
注意:在Visual Studio的早期版本中,似乎它不能在VB.NET中工作,但在C#中它正在工作.
Jon*_*eet 10
我不知道VB,但在C#中,据我所知,这已经被允许了1.0.
实际上,您甚至可以将代码区域放在跨越范围的奇数位置.例如:
class Test
{
    static void Main()
    {
        if (DateTime.Now.Hour > 12)
        {
#region Foo
            Console.WriteLine("Afternoon");            
        }
#endregion
    }
}
这里的区域在声明中开始if,但在它之外结束.可怕,但编译器很好用.
当你说IDE没有"让"你把代码放在地区时,你是什么意思?你有编译器错误吗?