为什么非关闭#region
会导致编译错误?毕竟,该区域本身对编译的代码完全没有影响,对吧?
我相信这是因为它是一个预处理器指令,但为什么呢?毕竟它不像其他指令那样使用。
class Application
{
#region Whatever <- Causes an error.
static void Main(string[] c)
{
}
}
为什么不能被忽略?或者是否有一个我不了解#region
的功能,它解释了为什么编译它?
修改:我知道这个例子没有编译,因为没有相应的#endregion
。但是,它不应该被视为xml注释中缺少的结束标记吗?我的意思是,它有同样的重要性吗?
第二次修改:我希望了解制作#region
预处理器指令背后的设计决策。为什么不只是一种注释,IDE会将其识别为可以折叠的代码区域?
答案 0 :(得分:15)
为什么非关闭的#region导致编译器错误?
因为specs这么说。
#region块必须以#endregion指令终止。
是的,它们不会成为编译程序的一部分,但是其他预处理器指令可以定义程序的一部分,例如#if DEBUG
(包含某些内容) 。
预处理指令不是令牌,也不是令牌的一部分 C#的句法语法。 但是,预处理指令可以 用于包括或排除令牌序列,并可以这种方式 影响C#程序的含义。
对于你的问题:
但是为什么预处理器甚至考虑#region标签,为什么呢 它创建为预处理器指令而不仅仅是另一种 评论
区域有助于IDE(Visual Studio)的目的,实现与没有区域的折叠/扩展代码相同的功能(如果不是不可能)将是非常困难的。 (这是我的猜测,只有微软开发团队的成员可以回答这个问题)
区域没有附加语义; 区域是有意的 程序员或自动化工具用来标记一部分 源代码。 #region或#endregion中指定的消息 指令同样没有语义含义;它仅仅用于 确定该地区。匹配#region和#endregion指令可能 有不同的pp消息。