【发布时间】:2015-01-04 09:01:04
【问题描述】:
我只是想弄清楚为什么在下面的某些行不以分号结尾但其他行以分号结尾的技术原因 - C# 在某些行中期望的分号是什么,然后在其他行中......
事实上,在写这篇文章时,我注意到必须有大括号 {} 的语句不需要分号,但在它自己的 "Console.WriteLine" 上的行确实需要它。
真的想找出技术原因……
即:
namespace checkPackage **//no semicolon**
{
class Program **//no semicolon**
{
static void Main(string[] args) **//no semicolon**
{
listFilesInDirectory(@"C:\Temp\"); **//NEEDS a semicolon**
}
static void listFilesInDirectory(string workingDirectory) **//no semicolon**
{
string[] filePaths = Directory.GetFiles(workingDirectory); **//NEEDS a semicolon**
foreach (string filePath in filePaths) **//no semicolon**
{
Console.WriteLine(filePath); **//NEEDS a semicolon**
}
}
}
}
【问题讨论】:
-
对于 1 放置行尾有点随意。代码块 { code here } 也不需要分号。
-
质疑现状没有任何问题。答案是显而易见的,语言创造者通过陈述创造了这种“前进的道路”。
-
因为“线”这个词几乎肯定不会出现在正式的 C# 语言规范中。只有玩具语言才有台词。
-
注意:这不仅限于 C#。大多数使用分号的语言都是这样做的:PHP、C、C++、Java 等......
-
不要忘记,在最后两行中,您可以有一个可选的分号。所以以
class_declaration结尾的}和以namespace_declaration结尾的}后面可以跟一个分号。但是,结束方法体等的}后面不能跟分号!结束一个块的}不以分号结尾,但如果你放一个,它将变成一个empty_statement,这是允许的。例如if (b) { M(); };,最后一个分号是empty_statement。
标签: c#