web-dev-qa-db-ja.com

C#にステートメントが存在する場合は他にありますか?

C#で次のコードを見つけました。

if(condition0) statement0;
else if(condition1) statement1;
else if(condition2) statement2;
else if(condition3) statement3;
...
else if(conditionN) statementN;
else lastStatement;

私の同僚の何人かは、これがelse ifステートメントであると言っています。ただし、これは実際には多層のネストされたif-elseステートメントであると確信しています。区切り文字{}がない場合、ifまたはelseで1つのステートメントが許可されます。したがって、この場合、次のコードと同等になると思います。

if(condition0) 
  statement0;
else
  if(condition1)
    statement1;
  else
    if(condition2)
      statement2;
    else
      if(condition3)
        statement3;
      else
      ...

変更したのは空白だけでした。このインデントが機能するのは、区切り文字がない場合、各elseが最新のifステートメントに戻るためです。

最初の例のelse if形式が、2番目の例のネストされたif-else形式とコンパイラによって異なる方法で処理される場合、誰でも明確にできますか?

48
Aviv B.

あなたは正しいです; C#には「else if」ステートメントのようなものはありません。代替節のステートメント自体がifステートメントである場合は、elseです。

もちろん、[〜#〜] ide [〜#〜]は、 "else if"を特別なものとして扱い、期待するNiceフォーマットを取得します。

is an #Elif「プリプロセッサ」構文の構成。

また、C、C++、およびECMAScript(さらに多くのCライクな言語)には、正式な「else if」ステートメントがないという特性もあります。むしろ、それぞれの動作は、「else」の定義から1つのステートメントの前に来るものとして外れます。

77
Eric Lippert

それは多層のif-elseです。

その理由は、c#構文規則に関係しています。 elseの後にステートメントが続き、ifチェーンはステートメントとして修飾されます。

4
Robert Harvey

コンストラクトelse ifC#仕様 で言及されることはありませんが、説明なしで使用される一部の例を除きます。だから私はそれが特別な構造であるとは思わない、それはただのif文です。

4
Mark Byers

あなたは正しいです。 elseの後にifが続きます。

3
James Curran

C#には「else if」ステートメントはありません。

さらに言えば、C#にanyマルチワードステートメントキーワードがあることはわかりません。

2
John Saunders

@hunterの答えを拡張すると、角かっこなしでは次の行のみが実行され、ネストされた束の場合はelseに角かっこが必要になります。

if(condition0) 
  statement0;
else
{
  if(condition1)
    statement1;
  else
  {
    if(condition2)
      statement2;
    else
    {
      if(condition3)
        statement3;
      else
      ...
    }
  }
}
1
Dustin Laine

C#言語仕様の 選択ステートメント は、ifおよびswitchステートメントのみを表示します。 ifステートメントを選択すると、次のように表示されます。

Ifステートメントは、ブール式の値に基づいて実行するステートメントを選択します。

ifステートメント:

if(boolean-expression)埋め込みステートメント

if(boolean-expression)埋め込みステートメントelse埋め込みステートメントboolean-expression:式

Else部分は、構文で許可されている場合、字句的に最も近い先行に関連付けられます

1
SwDevMan81

指定する2つの例は、すべての言語で同等です。 CまたはC#では、else、ifの場合とまったく同じです。他のいくつかの言語では、elseifはelse、then ifの構文糖衣です。したがって、使用する言語に関係なく、同じコードにコンパイルされます(または同じ動作に解釈されます)。 http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If を参照してください

1