理解できないように見える簡単な質問があります。
これが有効な c# である理由:
if (node != null)
{
string fullAddress = node.InnerText;
}
そして、これはそうではありませんか?
if (node != null)
string fullAddress = node.InnerText;
これはコンパイラのバグですか、それとも意図したものですか?
理解できないように見える簡単な質問があります。
これが有効な c# である理由:
if (node != null)
{
string fullAddress = node.InnerText;
}
そして、これはそうではありませんか?
if (node != null)
string fullAddress = node.InnerText;
これはコンパイラのバグですか、それとも意図したものですか?
これは予想される動作であり、1 つのステートメントを使用することを覚えていれば意味があります。if
したがって、そのような構文が許可されている場合、変数宣言のスコープは宣言された直後に終了します。
C# 5.0 仕様のセクション 8.5 (リンクを提供してくれた Rob Harvey に感謝) で説明されている詳細と、セクション B.2.5 の文法:
セクション 8.5:
宣言ステートメントは、ローカル変数または定数を宣言します。宣言ステートメントはブロックで許可されていますが、埋め込みステートメントとしては許可されていません。
セクション B.2.5 の文法:
statement:
labeled-statement
declaration-statement
embedded-statement
embedded-statement:
block
...
if-statement:
if ( boolean-expression ) embedded-statement
ご覧のとおり、変数宣言 ( declaration-statement
) はそうではないembedded-statement
ため、 では使用できませんif-statement
。
C# 仕様の場所に関する注意:
if (node != null)
string fullAddress = node.InnerText;
これは、角かっこを使用する必要のない Visual Basic スタイルのコード記述です。また、C# では、括弧を指定しないと、1 行のステートメントしか実行されません。ただし、さらに複数行のコードを実行する必要がある場合は、ブラケットを使用する必要があります。