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
形式とコンパイラによって異なる方法で処理される場合、誰でも明確にできますか?
あなたは正しいです; C#には「else if」ステートメントのようなものはありません。代替節のステートメント自体がifステートメントである場合は、elseです。
もちろん、[〜#〜] ide [〜#〜]は、 "else if"を特別なものとして扱い、期待するNiceフォーマットを取得します。
is an #Elif
「プリプロセッサ」構文の構成。
また、C、C++、およびECMAScript(さらに多くのCライクな言語)には、正式な「else if」ステートメントがないという特性もあります。むしろ、それぞれの動作は、「else」の定義から1つのステートメントの前に来るものとして外れます。
それは多層のif-elseです。
その理由は、c#構文規則に関係しています。 else
の後にステートメントが続き、if
チェーンはステートメントとして修飾されます。
コンストラクトelse if
が C#仕様 で言及されることはありませんが、説明なしで使用される一部の例を除きます。だから私はそれが特別な構造であるとは思わない、それはただのif文です。
あなたは正しいです。 else
の後にif
が続きます。
C#には「else if」ステートメントはありません。
さらに言えば、C#にanyマルチワードステートメントキーワードがあることはわかりません。
@hunterの答えを拡張すると、角かっこなしでは次の行のみが実行され、ネストされた束の場合はelseに角かっこが必要になります。
if(condition0)
statement0;
else
{
if(condition1)
statement1;
else
{
if(condition2)
statement2;
else
{
if(condition3)
statement3;
else
...
}
}
}
C#言語仕様の 選択ステートメント は、if
およびswitch
ステートメントのみを表示します。 if
ステートメントを選択すると、次のように表示されます。
Ifステートメントは、ブール式の値に基づいて実行するステートメントを選択します。
ifステートメント:
if(boolean-expression)埋め込みステートメント
if(boolean-expression)埋め込みステートメントelse埋め込みステートメントboolean-expression:式
Else部分は、構文で許可されている場合、字句的に最も近い先行に関連付けられます
指定する2つの例は、すべての言語で同等です。 CまたはC#では、else、ifの場合とまったく同じです。他のいくつかの言語では、elseifはelse、then ifの構文糖衣です。したがって、使用する言語に関係なく、同じコードにコンパイルされます(または同じ動作に解釈されます)。 http://en.wikipedia.org/wiki/Conditional_%28programming%29#Else_If を参照してください