6

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);
     }
  }
4

6 に答える 6

13

C# のセミコロンは、単にステートメントの終わりを示すためのものです。空のステートメント、または だけでも;有効です。

C# の任意の関数内に次の行を単独で含めることができ、正常にコンパイルされるはずです。

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

同じトピックですが、当面の質問とは少し異なりますが、中括弧の空のセット{ }. これらは「コード ブロック」を表しますが、コード内のどこでも有効です。繰り返しますが、1 行に次のようなものを記述しても問題なくコンパイルできます。

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

最終的に、empty-statement ブロックと empty-code ブロックはすべてコンパイルされて、「ここには何も表示されないので、先に進んでください」という結果になり、ほとんどの場合、結果を伴わずにコードから削除できます。

于 2013-01-08T16:47:21.363 に答える
7

ac# 開発者として、「空のステートメント」を使用します

;

(コメントリクエストとして有用なケース)

複数行のラムダがあり、評価の最後の行を調べたい場合、つまり

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
}
于 2013-01-08T16:47:07.183 に答える
6

何もしない発言です。通常、これは無意味であり、単に削除することができますが、ステートメントが予期されていて、本当に何も起こらないようにする場合があります。

これは、副作用を引き起こし、body を必要としないループで見られることがあります。

int count = 0;
while(isTheRightNumber(count++))
    ;

個人的には、このようなコード例は嫌いであり、副作用のない条件を持つループよりも理解しにくい傾向があるため、実践を思いとどまらせます。次のような関連するコメントを含める場合と同様に、空の中括弧のセットを使用すると、少し明確になります。

int count = 0;
while(isTheRightNumber(count++)) 
    { } //empty by design

もう 1 つの例は、for無限ループにループを使用するパターンです。

for(;;)
{
    //stuff
}

基本的には次と同じです:

while(true)
{
    //stuff
}
于 2013-01-08T16:46:10.307 に答える
3

空文です。私は使ったことはありませんが、多くの言語に存在します。

于 2013-01-08T16:47:00.600 に答える
2

セミコロン (;) はステートメントの終わりを示していました。したがって、何もせずにセミコロンを追加すると...空のステートメントであることを意味します

于 2013-01-08T16:48:42.997 に答える
1

空のステートメントは、ステートメントがブロックを期待しているが、何もしたくない場合に使用されることがあります。

例えば:

for(i=0; array[i]!=null; i++)
    ;

またはネストされた if then elses の場合は中括弧なし:

// 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 を追加するだけなので、ブレークポイントをドロップできます。

于 2013-01-08T16:50:25.567 に答える