编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法Lambda表达式代替方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法Lambda表达式代替方法相关的知识,希望对你有一定的参考价值。

 

建议150:使用匿名方法、Lambda表达式代替方法

方法体如果过小(如小于3行),专门为此定义一个方法就会显得过于繁琐。比如:

        static void SampeMethod()
        {
            List<string> list=new List<string>(){"Mike","Rose","Steve"};
            var mike = list.Find(new Predicate<string>(HaveLengthFive));
            Console.WriteLine(mike);
        }

        static bool HaveLengthFive(string value)
        {
            return value.Length == 5;
        }

 上面的代码中,SampleMethod方法需要完成的功能是查看list中有没有长度等于5的元素。Predicate是一个委托,它接收元素值,并返回元素是否符合要求这一结果。而真正工作的代码只有1行。有些繁琐,所以要重构:

        static void SampeMethod()
        {
            List<string> list=new List<string>(){"Mike","Rose","Steve"};
            var mike = list.Find(delegate(string value) { return value.Length == 5; });
            Console.WriteLine(mike);
        }

 由delegate引领的语句就是一个匿名方法。其次,匿名方法经过编译器编译之后,就和普通方法没有任何区别了。匿名方法带来的只是简化程序员的部分工作而已。

更好的简化方法就是Lambda表达式。Lambda表达式有符号“=>”连接(读作“goes to”),符号左边是参数列表,右边是方法体。Lambda表达式更进一步简化了匿名方法的语法:

        static void SampeMethod()
        {
            List<string> list=new List<string>(){"Mike","Rose","Steve"};
            var mike = list.Find(value => value.Length == 5);
            Console.WriteLine(mike);
        }

 

 

 

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

以上是关于编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法Lambda表达式代替方法的主要内容,如果未能解决你的问题,请参考以下文章

编写高质量代码改善C#程序的157个建议——建议141:不知道该不该用大括号时,就用

编写高质量代码改善C#程序的157个建议——建议52:及时释放资源

编写高质量代码改善C#程序的157个建议——建议41:实现标准的事件模型

编写高质量代码改善C#程序的157个建议——建议67:慎用自定义异常

编写高质量代码改善C#程序的157个建议——建议111:避免双向耦合

编写高质量代码改善C#程序的157个建议——建议143:方法抽象级别应在同一层次