C#でもやってみる
C#でも同じことをやってみました。
これではだめで、
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Func<int, int, int>[] lams = new Func<int, int, int>[10]; foreach (var x in Enumerable.Range(0, 10)) { lams[x] = (l, m) => l * x + m; } Array.ForEach(lams, (lam) => Console.WriteLine(lam(1, 5))); } } }
こっちでは、うまくいきます。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Func<int, int, int>[] lams = new Func<int, int, int>[10]; foreach (var x in Enumerable.Range(0, 10)) { int y = x; lams[y] = (l, m) => l * y + m; } Array.ForEach(lams, (lam) => Console.WriteLine(lam(1, 5))); } } }
以下、C#3.0ぽい書き方にしてみました。
メソッドチェインで。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var lams2 = Enumerable.Range(0, 10).Select(x => (Func<int, int, int>)((int l, int m) => l * x + m)); foreach (var item in lams2) { Console.WriteLine(item(1,5)); } } } }
LINQで。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var lams2 = from x in Enumerable.Range(0, 10) select (Func<int, int, int>)((int l, int m) => l * x + m); foreach (var item in lams2) { Console.WriteLine(item(1,5)); } } } }