1: using System;
2: using System.Collections;
3:
4: namespace Lambada
5: {
6: class Mai2n
7: {
8: private static string[] words = {"dog","cat","mink"};
9: delegate void StringDelegate(string args);
10: delegate string RetStringDelegate(string args);
11: delegate void IntegerDelegate(int i);
12:
13: private static void PrintInt(int i)
14: {
15: Console.WriteLine("Integer: " +i);
16: }
17:
18: private static void PrintStr(string str)
19: {
20: Console.WriteLine(str);
21: }
22:
23: private static string Capitalize(string str)
24: {
25: if(!Char.IsUpper(str,0))
26: str = Char.ToUpper(str[0])+str.Substring(1);
27: return str;
28: }
29:
30: private int multiplyBy;
31: public void Multiply(int i)
32: {
33: Console.WriteLine("Multiply by "
+ multiplyBy +": " + i*multiplyBy);
34: }
35:
36: public static void Main(string[] args)
37: {
38: Mai2n m = new Mai2n();
39: m.multiplyBy = 2;
40: Map(new StringDelegate(PrintStr),words);
41: Map(new IntegerDelegate(PrintInt),new int[]
{1,3,5,7,11,13});
42: Map(new StringDelegate(PrintStr),
43: ReturningMap(new RetStringDelegate(Capitalize)
,words));
44: Map(new IntegerDelegate(m.Multiply),new int[]
{2,4,6,8,10});
45: }
46:
47: public static void Map(Delegate d, IList list)
48: {
49: foreach (object o in list)
50: {
51: d.DynamicInvoke(new object[]{o});
52: }
53: }
54:
55: public static IList ReturningMap(Delegate d, IList list)
56: {
57: ArrayList al = new ArrayList(list.Count);
58: object ret;
59: foreach(object o in list)
60: {
61: ret = d.DynamicInvoke(new object[]{o});
62: if(ret!=null)
63: al.Add(ret);
64: }
65: return al;
66: }
67: }
68: }