F#みたいなこともだいぶ楽に書けるんだね。
using System;
using System.Collections.Generic;
delegate T Func<T>(T arg);
class Test {
public static List<T> Map<T>(List<T> list, Func<T> func) {
for (int n = 0; n < list.Count; n++) {
list[n] = func(list[n]);
}
return list;
}
public static void Iter<T>(List<T> list, Func<T> func) {
foreach (T t in list) {
func(t);
}
}
static void Main() {
List<int> l = new List<int>();
l.Add(1); l.Add(2); l.Add(3); l.Add(4); l.Add(5);
// 二乗する関数
Func<int> square = delegate(int n) {
return n * n;
};
// 表示する関数
Func<int> print = delegate(int n) {
Console.WriteLine(n);
return 0;
};
Map(l, square);
Iter(l, print);
}
}