当前位置:首页 > Windows程序 > 正文

建议37:使用Lambda表达式代替方法和匿名方法

2021-03-27 Windows程序

建议37:使用Lambda表达式代替方法和匿名方法

在建议36中,我们创建了这样一个实例程序:

static void Main(string[] args) { Func<int, int, int> add = Add; Action<string> print = Print; print(add(1, 2).ToString()); } static int Add(int i, int j) { return i + j; } static void Print(string msg) { Console.WriteLine(msg); }

实际上要完成相同的功能,还有很多种编码方式。先看一种最中规中矩的,也是最繁琐的写法:

static void Main(string[] args) { Func<int, int, int> add = new Func<int, int, int>(Add); Action<string> print = new Action<string>(Print); print(add(1, 2).ToString()); } static int Add(int i, int j) { return i + j; } static void Print(string msg) { Console.WriteLine(msg); }

注意:上面的语法虽然繁琐,但是我们可以从中加深对委托本质的认识:委托也是一种数据类型,跟任何FCL 中的引用类型没有差别。

也可以使用匿名方法:

Func<int,int,int> add=new Func<int, int, int>(delegate(int i, int j) { return i + j; }); Action<string> print=new Action<string>(delegate(string msg) { Console.WriteLine(msg); });

       print(add(1, 2).ToString());

使用匿名方法后,我们就不需要再Main方法外部声明两个方法了,,可以直接在Main这个工作方法中完成所有代码编写,而不会影响代码清晰性。实际上,所有代码行数不超过3行的方法(条件是它不被重用),我们都建议采用这种方式来编写。

上面的改进版本为:

Func<int,int,int> add=delegate(int i, int j) { return i + j; }; Action<string> print=delegate(string msg) { Console.WriteLine(msg); };

       print(add(1, 2).ToString());

最终改进版本是使用Lambda表达式:

Func<int,int,int> add= (i, j) => i + j; Action<string> print= msg => Console.WriteLine(msg); print(add(1, 2).ToString());

Lambda表达式操作符“=>”的左侧是方法的参数,右侧是方法体,其本质是匿名方法。实际上,经过编译后的Lambda表达式就是一个匿名方法。我们应该在实际编码中熟练运用它,避免出现繁琐且不美观的代码。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68416.html