2013-08-09 10 views
5

なぜC#コンパイラがコンパイルエラーを生成するのですか?私はそれが既にに「子」の範囲で使用される「B」に異なる意味を、与えるため、「B」という名前のローカル変数は、このスコープ内で宣言することはできません</p> <pre><code>using(some code) { var b = .... } var b = ... </code></pre> <p><code>Erorr:</code>次のコードしている

using(some code) 
{ 
var b = .... 
} 
b = ... 

Error:名 'B' は現在のコンテキスト内に存在しないの編集、

[OK]を何か別のものを示して

+2

+1:最初のコンパイラエラーは常に私を困惑させました。 –

+4

これはSOの次の記事に関連しているようです:http://stackoverflow.com/questions/6156449/why-cant-a-duplicate-variable-name-be-declared-in-a-nested-local-scope – DarkKnight

+0

http ://stackoverflow.com/questions/4649947/why-doesnt-c-sharp-allow-me-to-use-the-same-variable-name-in-different-scopes – Karthik

答えて

1

これを行うことはできますか?

for (int i = 0; i < 10; i++) 
{ 
    int j = 1; 
} 
int j = 2; 

答えはどこにでもそれはかなり一貫性の意味NOです。今、それは理由を尋ねます。 Answerこの質問に対して同じローカル変数宣言スペースまたはネストされたローカル変数宣言スペースに同じ名前の2つのローカル変数があることは不正です。そして、上記の場合、Jの宣言は同じネストされたスコープ内にあります。

+0

えええええええええば...スコープ変数はカスケードします。変数スコープの子スコープからスコープされた変数にアクセスすることができます...それはたくさんの "スコープ"です – gislikonrad

-2

正しいコードがあるべきである:あなたがそのブロックのブロック({})内で宣言外部変数を使用することができない

var b = something; 
using(some code) 
{ 
    b = smth; 
} 
b = smth; 

+0

それは問題ではありません。 –

8

"ブロックのローカル変数宣言スペースにはネストされたブロックが含まれているため、ネストされたブロック内では、囲むブロック内のローカル変数と同じ名前のローカル変数を宣言することはできません。 Variable Scopes, MSDN