Action
タイプとLambdasをC#でお試しください。ここに来るのコードは:あなたはそれが行に10、10倍を出力していることがわかりますこのコードを実行する場合はC#オブジェクトリファレンスとアクションタイプ
static void Main(string[] args)
{
List<Action> actions = new List<Action>();
for (int I = 0; I < 10; I++)
actions.Add(new Action(() => Print(I.ToString())));
foreach (Action a in actions)
{
a.Invoke();
}
actions.Clear();
int X;
for (X = 0; X < 10; X++)
{
int V = X;
actions.Add(new Action(() => Print(V.ToString())));
}
foreach (Action a in actions)
{
a.Invoke();
}
Console.ReadLine();
}
public static void Print(string s)
{
Console.WriteLine(s);
}
、その後、0から9の数字の周りに二回目を出力します。それは明らかに私がXと私が使用する方法と関係があり、2回目のループで毎回新しい変数Vに自分のアクションをどのように与えるのか...おそらく新しいVがそれぞれメモリ内の新しいアドレスですが、なぜI.ToString()が最初のループで同じことをしないのか理解するのに苦労しています...なぜ2番目の例と同じ方法で最初のActionで働くIToString()はありませんか?
これは役に立ちます:http://stackoverflow.com/questions/3168375/using-the-iterator-variable-of-foreach-loop-in-a-lambda-expression-why-fails –