一个;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#的任何函数中单独放置下面的一行代码,它应该可以很好地编译:

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

在相同的主题上,但与手头的问题半不同,是一组空的花括号{ }。它们表示"代码块",但在代码中的任何地方都有效。同样,您可以在单行中使用以下内容,它仍然可以正常编译:

{ } { ;;;;;;;;;; } { }

最后,空语句和空代码块都编译成"这里没什么可看的,继续吧",并且在大多数情况下可以从代码中删除而不会产生任何后果。

作为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,所以你可以在它上面放一个断点