x
パラメータの動作が不安定なのはなぜですか?
- 例 1 - 現在のコンテキストには存在しません。
- 例 2 -
x
「子」スコープで定義されているため、再利用できません。 - 例 3 - 結構です。これは私が混乱している部分です。おそらく別の「子」スコープですか?
例 1 :
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
var result = list.Where(x => x < 3);
Console.Write(result.ElementAt(x));
このコンパイル時エラーを作成します。
名前「x」は現在のコンテキストに存在しません
私が期待するもの。
例 2 :
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
var result = list.Where(x => x < 3);
int x = 1;
Console.Write(result.ElementAt(x));
次のコンパイル時エラーが発生します。
'x' という名前のローカル変数をこのスコープで宣言することはできません。これは、'x' に別の意味を与えるためです。'x' は、'子' スコープで別のものを示すために既に使用されています。
この質問で回答されているスコープを理解しています.Is there a reason for C#'s reuse of the variable in a foreach? . しかし、これは私が今まで見たことのないものです。さらに、C# でのラムダ変数のスコープは何ですか? 、不完全または間違っています。
例 3 :
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
List<string> stringList = new List<string> { "A", "B" };
var result = list.Where(x => x < 3);
var result2 = stringList.Where(x => x != "A");
Console.Write(result2);
エラーは発生しませんでした。
受け入れられた回答で、Eric Lippert からのこれらのブログ投稿は、何が起こっているのかを理解するのに役立ちました。まだ混乱している場合: