Func委托
1. 无参有返回值
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { //1. 通过New关键字实例化,使用Invoke方法调用 Func<int> fun1 = new Func<int>(FunWithNoPara); int result1 = fun1.Invoke(); Console.WriteLine(result1); //2. 直接将方法赋值,当做普通方法方式调用 Func<int> fun2 = FunWithNoPara; int result2 = fun2(); Console.WriteLine(result2); //3. 使用匿名函数 Func<int> fun3 = delegate() { return 10; }; int result3 = fun3(); Console.WriteLine(result3); //4. Lambda表达式(推荐) Func<int> fun4 = () => 10; int result4 = fun4(); Console.WriteLine(result4); Console.ReadLine(); } public static int FunWithNoPara() { return 10; } } }
2. 一个参数有返回值
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { //1. 通过New关键字实例化,使用Invoke方法调用 Func<int, int> fun1 = new Func<int, int>(FunWithPara); int result1 = fun1.Invoke(1); Console.WriteLine(result1); //2. 直接将方法赋值给委托,当做普通方法调用 Func<int, int> fun2 = new Func<int, int>(FunWithPara); int result2 = fun2.Invoke(1); Console.WriteLine(result2); //3. 使用匿名函数 Func<int, int> fun3 = delegate(int p) { return p; }; int result3 = fun3(1); Console.WriteLine(result3); //4. Lambda表达式 Func<int, int> fun4 = p => p; int result4 = fun4(1); Console.WriteLine(result4); Console.ReadLine(); } static int FunWithPara(int i) { return i; } } }
3. 多个参数有返回值
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { //定义委托 class Program { static void Main(string[] args) { //1. 通过New关键字实例化,使用Invoke方法调用 Func<int, string, bool> fun1 = new Func<int, string, bool>(FunWithMultiPara); bool result1 = fun1.Invoke(2, "abc"); Console.WriteLine(result1); //2. 直接赋值,普通方法调用 Func<int, string, bool> fun2 = FunWithMultiPara; bool result2 = fun1.Invoke(2, "2"); Console.WriteLine(result1); //3. 使用匿名函数 Func<int, string, bool> fun3 = delegate(int p, string q) { return p.ToString().Equals(q) ? true : false; }; bool result3 = fun3(1, "1"); Console.WriteLine(result2); //4. Lambda表达式 Func<int, string, bool> fun4 = (p, q) => { return p.ToString().Equals(q) ? true : false; }; bool result4 = fun4(1, "ed"); Console.WriteLine(result3); Console.ReadLine(); } static bool FunWithMultiPara(int i, string s) { return i.ToString().Equals(s) ? true : false; } } }
4. 委托当做方法参数
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.WriteLine(Test<int, int>(Fun, 100, 200)); Console.ReadKey(); } public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b) { return func(a, b); } private static int Fun(int a, int b) { return a + b; } } }