Anonym, c# - Delegaten in einer Schleife
Hallo alle, ich bin versucht, zu schreiben und anonymen Delegaten. wie die integer-variable ist, die gemeinsam von der Delegat muss ich es sein, der lokalen Instanz von Delegierten, so dass rs[0] bekommt immer nics[0], rs[1] bekommt immer nics[1] und so weiter... wie kann ich dies erreichen.
for (int i = 0; i < nics.Count; i++)
{
rs[i] = new RollingSeries(monitor, new RollingSeries.NextValueDelegate(delegate()
{
return GetNetworkUtilization(nics[i]);
}));
}
Abdul khaliq
- Seien Sie extrem vorsichtig, was Sie Fragen. Möchten Sie Ihre erste-Verschluss, um immer den Wert in nics[0] zu der Zeit wird der Delegat aufgerufen wird, oder wollen Sie den Verschluss, um den Wert, der zufällig in nics[0] in der Zeit der Delegat erstellt wurde? Das sind zwei verschiedene Dinge; - nics[0] ist eine variable, so ist sein Wert kann im Laufe der Zeit ändern. Wollen Sie den Verschluss, um zu sehen, dass ändern, oder ignorieren, ändern?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen Sie eine lokale Kopie der
i
:Die Schönheit der Verschlüsse
Verwendung einer lokalen, um einen unterschiedlichen Wert pro iteration
Setzen
int j = i
im inneren der Schleife und beziehen sich aufj
innerhalb des lambda-Ausdrucks.Wenn Sie neugierig sind, warum dies geschieht, ist hier ein MSDN-blog-Eintrag enthält eine detaillierte technische Erklärung: Schließen über den loop-variable considered harmful