2012-03-15 4 views
0

可能性の重複:
Variable declarations following if statements
Why this compile errorC#のエラーif文

私は「組み込み文が宣言またはラベル付き文にすることはできません」私はため、エラーを取得しています括弧のないif文に続く変数の宣言がありました。とにかく、それは私にこれをもたらす背景です。あなたは括弧で、それはすべての法的だことを折り返す場合

次のコードは、

if (true) int i = 7; 

しかし違法です。

if (true){ int i = 7;} 

どちらのコードも役に立ちません。しかし、もう1つはOKです。具体的にこの行動の説明は何ですか?

答えて

1

あなたは変数を宣言しているので、あなたが文を作成していることを意味します。文ブロックは角括弧{}で囲む必要があります。 Statements

2

最初のバージョンには表現式がなく、if文の後に続く宣言だけが続きますが、それに続く文が必要な場合はありません。

番目のバージョンは、ステートメントを持っています。 {}括弧の対は、それが空であっても、既にステートメントである(宣言は再び文としてカウントされません)。

1

コードのいずれも片が有用です。

コンパイラは有用性を確認することができない、それだけで明確な「非有用性」を確認することができます。
あなたは意味をなさないかもしれない可能性があり、二番目に変数を使用したい場合。

しかし、最初の例では、変数iは次の行ですでに範囲外になっているため使用できません。宣言をもう一度有効にする別の行を追加する機会はありません。

それでも、もう一つは同様の警告を生成する必要があり、「変数iが割り当てられているが、その値が使用されることはありませんが。」

0

は非常に一般的な方法で説明:それはカッココンパイラの真ん中に原因があります、それは使用される「前提」。

角括弧なしでは、の後にを初期化することはできません。角括弧の中に、代わりに、できます。

excelentを参照してください。Skeet答えはです。質問とEric Lippertコメントです。

1

{}で囲まれていない埋め込みステートメントは、宣言ステートメントまたはラベルステートメントにすることはできません。詳細については、http://msdn.microsoft.com/en-us/library/ms173143.aspx

さらに変数を宣言すると、その直後に条件が終了し、変数の有効範囲が終了すると、それが表示されます。コンパイラがエラーを出すのは当然のことです。代わりに{}を使用すると、コンパイラは '{'と '}'の間のどこかでこの変数を使用すると仮定します