为什么#region会创建编译错误?

时间:2015-10-26 19:54:57

标签: c# preprocessor-directive

为什么非关闭#region会导致编译错误?毕竟,该区域本身对编译的代码完全没有影响,对吧?

我相信这是因为它是一个预处理器指令,但为什么呢?毕竟它不像其他指令那样使用。

class Application
{
    #region Whatever <- Causes an error.
    static void Main(string[] c)
    {

    }

}

为什么不能被忽略?或者是否有一个我不了解#region的功能,它解释了为什么编译它?

修改:我知道这个例子没有编译,因为没有相应的#endregion。但是,它不应该被视为xml注释中缺少的结束标记吗?我的意思是,它有同样的重要性吗?

第二次修改:我希望了解制作#region预处理器指令背后的设计决策。为什么不只是一种注释,IDE会将其识别为可以折叠的代码区域?

1 个答案:

答案 0 :(得分:15)

  

为什么非关闭的#region导致编译器错误?

因为specs这么说。

  

#region块必须以#endregion指令终止。

是的,它们不会成为编译程序的一部分,但是其他预处理器指令可以定义程序的一部分,例如#if DEBUG (包含某些内容)

2.5 Pre-processing directives

  

预处理指令不是令牌,也不是令牌的一部分   C#的句法语法。 但是,预处理指令可以   用于包括或排除令牌序列,并可以这种方式   影响C#程序的含义。

对于你的问题:

  

但是为什么预处理器甚至考虑#region标签,为什么呢   它创建为预处理器指令而不仅仅是另一种   评论

区域有助于IDE(Visual Studio)的目的,实现与没有区域的折叠/扩展代码相同的功能(如果不是不可能)将是非常困难的。 (这是我的猜测,只有微软开发团队的成员可以回答这个问题)

Region directive:

  

区域没有附加语义; 区域是有意的   程序员或自动化工具用来标记一部分   源代码。 #region或#endregion中指定的消息   指令同样没有语义含义;它仅仅用于   确定该地区。匹配#region和#endregion指令可能   有不同的pp消息。