一个;c#中没有语句
本文关键字:语句 一个 | 更新日期: 2023-09-27 17:50:58
我正在看一个c#代码示例。这里是;
,前面没有任何表述。我以为是打错了。我试着用;
编译。它编译得很好。没有任何代码语句,;
有什么用?
我使用的是VS 2010, c#和。net 4.0
private void CheckSmcOverride(PatLiverSmc smc)
{
;
if (smc.SmcOverride && smc.Smc != null
&& smc.Smc.Value < LiverSmcConst.SMC_OVERRIDE_POINT)
{
smc.Smc = 10;
_logger.DebugFormat("CheckSmcOverride: Override SMC {0}", smc.Smc);
}
}
c#中的分号仅仅表示语句结束。空语句,或者单独的;
都是有效的。
你可以在c#的任何函数中单独放置下面的一行代码,它应该可以很好地编译:
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
在相同的主题上,但与手头的问题半不同,是一组空的花括号{ }
。它们表示"代码块",但在代码中的任何地方都有效。同样,您可以在单行中使用以下内容,它仍然可以正常编译:
{ } { ;;;;;;;;;; } { }
最后,空语句和空代码块都编译成"这里没什么可看的,继续吧",并且在大多数情况下可以从代码中删除而不会产生任何后果。
作为c#开发人员,我使用'empty statement'
;
(作为注释请求的有用案例)
当我有一个多行lambda并且我想检查最后一行计算时,即
list.ForEach(x=>
{
x.result = x.Value * x.AnotherValue;
; // otherwise I can't ever see these as you can't break on the end brace of an anonymous function
})
作为对前一行求值后的代码中的断点,例如
void SomeFunct()
{
int a = someOtherFunct();
; //I want a breakpoint here but...
//there is some huge code segment that will get skipped before I can breakpoint
}
这是一个不做任何事情的语句。通常情况下,这是没有意义的,可以直接删除,但有时您确实希望语句不发生任何事情。
有时你会看到循环会产生副作用,所以不需要正文:
int count = 0;
while(isTheRightNumber(count++))
;
我个人不喜欢这样的代码示例,并且不赞成这种做法,因为它们往往比具有副作用自由条件的循环更难理解。使用一组空大括号会更清晰一些,就像包含相关注释一样,例如:
int count = 0;
while(isTheRightNumber(count++))
{ } //empty by design
另一个例子是在无限循环中使用for
循环:
for(;;)
{
//stuff
}
本质上等同于:
while(true)
{
//stuff
}
这是一个空语句。我从未使用过它,但它存在于许多语言中。
分号(;)表示语句结束。所以如果你不加任何东西就加一个分号…这意味着它是一个空语句
当一个语句需要一个块,但你不希望它做任何事情时,有时会使用空语句。
例如:for(i=0; array[i]!=null; i++)
;
或对于嵌套的if then else不带大括号:
// don't really do this kids
if(cond1)
if(cond2)
doit();
else
;
else
dont();
有时表示if:
if(somecomplicatedconditionisnotfalseinverted()) // <-- this is already complicated enough, let's not ! that.
; // do nothing
else {
ohnoes();
}
但是在你的例子中,它在为发布版本构建时什么也不做,只是在为调试构建时添加了一个nop,所以你可以在它上面放一个断点