using System;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
int[] items = {1, 2, 3, 4, 5};
List<Action> actions = new List<Action>();
foreach(int i in items) {
int j = i; // Reassignment because of how foreach works, but this
// is still part of block scope; it's not a closure.
actions.Add(() => Console.WriteLine(j.ToString()));
}
foreach(Action a in actions) a();
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlpbnRbXSBpdGVtcyA9IHsxLCAyLCAzLCA0LCA1fTsKCQlMaXN0PEFjdGlvbj4gYWN0aW9ucyA9IG5ldyBMaXN0PEFjdGlvbj4oKTsKCgkJZm9yZWFjaChpbnQgaSBpbiBpdGVtcykgewoJCQlpbnQgaiA9IGk7IC8vIFJlYXNzaWdubWVudCBiZWNhdXNlIG9mIGhvdyBmb3JlYWNoIHdvcmtzLCBidXQgdGhpcwogCQkJICAgICAgICAgICAvLyBpcyBzdGlsbCBwYXJ0IG9mIGJsb2NrIHNjb3BlOyBpdCdzIG5vdCBhIGNsb3N1cmUuCgoJCQlhY3Rpb25zLkFkZCgoKSA9PiBDb25zb2xlLldyaXRlTGluZShqLlRvU3RyaW5nKCkpKTsKCQl9CgoJCWZvcmVhY2goQWN0aW9uIGEgaW4gYWN0aW9ucykgYSgpOwoJfQp9