static void Main(string[] args) { //Action TestAction<string>(Action, "Hello"); TestAction<int>(Action, 1000); TestAction<string>(p => { Console.WriteLine(p); }, "Lamada"); //Func int result = TestFunc<int, int>((t1, t2) => { return t1 + t2; }, 2, 6); Console.WriteLine(result); //predicate List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 }; Predicate<int> pre = delegate(int num) { return num > 3; }; list.FindAll(pre).ForEach(n => { Console.WriteLine(n); }); Console.ReadKey(); } static void TestAction<T>(Action<T> action, T p) { action(p); } private static void Action(string s) { Console.WriteLine(s); } private static void Action(int s) { Console.WriteLine(s); } static int TestFunc<T1, T2>(Func<T1, T2, int> func, T1 t1, T2 t2) { return func(t1, t2); }