Ale*_*lex 31 c# compilation termination
我最近在一个项目中遇到了这个代码 - 我认为这是错误的:
if(condition)
{
//Whatever...
};
Run Code Online (Sandbox Code Playgroud)
注意闭合支撑后的半冒号.
有谁知道这是什么影响?
我认为它没有任何影响,但会认为它会导致编译器错误.
sch*_*tte 33
这是一个简单的问题,答案很简单,但我只是想添加一些相关的东西.通常人们都知道它什么都不做,特别是对于你提出的情况,分号是一个不必要的行终止.
但它背后的理由是什么?
实际上,那些空语句允许这样的语句:
// Use an empty statement as the body of the while-loop.
while (Method())
;
Run Code Online (Sandbox Code Playgroud)
我同意它什么都不做.但它可以帮助某些循环符合语言的语法要求,我认为这是人们应该从中理解的.正如其他人所说,我同意你可以删除它,我只是想强调为什么C#允许它.
进一步澄清
当您不需要执行需要语句的操作时,将使用空语句.它只是将控制权转移到声明的终点.它完全没有效果,它是纯粹的语法糖.
正如@PaulF所述,在上面的例子中,您可以使用空块({}
)代替.它将完全有效并具有相同的效果.
同样,这一切都归结为风格.您不需要它,但它肯定可以帮助您符合编码环境的任何规则.
常见用例(可以看到空语句)
虽然循环与空体(我在上面加下划线的相同情况)
void ProcessMessages()
{
while (ProcessMessage())
; // Statement needed here.
}
Run Code Online (Sandbox Code Playgroud)goto
陈述(很少使用,但仍然有效)
void F()
{
//...
if (done) goto exit;
//...
exit:
; // Statement needed here.
}
Run Code Online (Sandbox Code Playgroud)
来自MSDN
类声明(@EricLippert的道具带来这个)
class SomeClass
{
...
};
Run Code Online (Sandbox Code Playgroud)请注意,在这种情况下,正如@EricLippert在评论部分所述,这只是对C++程序员的礼貌,他们习惯于在课后输入半成语; C++需要这个.
尽管空语句的一般用法是有争议的,主要是因为它们带来的混乱,在我看来,从语法上讲,它们在C#中占有一席之地.我们不能忘记C#是C++ 的增量(主要解释#
了2×2网格中的四个"+"符号),并且由于历史原因,允许空语句促进了转换.
Isa*_*itz 18
它似乎没有任何影响,但我不建议以这种方式编写代码.
如果您想要添加else
或else if
之后;
,它将无法编译.
例如:
if(5>1) {
//whatever
}; else {
//whatever
}
Run Code Online (Sandbox Code Playgroud)
这不会编译(注意;
之前else
)
这是Visual Studio将编译为空语句的有效语法,因为它只是语句终止.您的代码将编译,额外;
不会成为问题.
如果您愿意,可以将其删除以清理代码,但保留代码不会造成任何不利影响.
希望这可以帮助.