Linq Query で宣言されたローカル変数のスコープは何ですか。
私は次のコードを書いていました
static void Evaluate()
{
var listNumbers = Enumerable.Range(1, 10).Select(i => i);
int i = 10;
}
コンパイラは行 int i=10 にエラーをフラグ付けし、次のように述べています
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
このエラーが発生する理由を理解できません。
私の理解では、i
最初の行の後で( foreach ループで)範囲外になります。したがってi
、再度宣言することができます。
実際の動作は、i
最初の行の後 (foreach ループ内) にはアクセスできませんが、これは正しいことです。しかし、i
再度宣言することはできません。これは奇妙に思えます。
編集これは、Andras の回答に基づく次の質問です。答えは非常に良いですが、さらに疑問が生じます。
static void Evaluate3()
{
var listNumbers = Enumerable.Range(1, 10).Select(i => i);
var listNumbers1 = Enumerable.Range(1, 10).Select(i => i);
}
関数のロジックに基づいて .Select(i=>i) と int i=10 を評価し、両方の i が関数ブロックに対してローカルであるため、複雑なエラーが発生します。
関数 Evaluate3 は、メソッド ブロックに i が 2 つあるためコンパイルできませんが、警告やエラーなしで正常にコンパイルされています。
質問、Evaluate と Evaluate3 の両方をコンパイルしないか、両方をコンパイルする必要があります。