C# lambda表达式与匿名方法

  • 博主写作不容易,孩子需要您鼓励
  • 万水千山总是情 , 先点个赞行不行

C#中的匿名方法是在C#2.0引入的,它终结了声明委托的唯一方法是使用命名方法的时代。在C#更高版本中,Lambda表达式取代了匿名方法,作为编写内联代码的首选方式。但是,匿名方法的信息同样也适用Lambda表达式,可以说Lambda表达式就是匿名方法演变过来的。匿名方法可以用来忽略参数列表,可以转化为具有各种签名的委托,而这对于Lambda表达式来说是不可能的。

匿名方法

要将代码块传递为委托参数,创建匿名方法则是唯一的方法。匿名方法就是为了将代码块传递为委托参数,因此也有人将其称为匿名委托。使用C#匿名方法可以使委托及事件的代码编写更加精简、高效。一般情况下,事件注册事件处理方法,需要首先定义这个方法,如果该方法仅用于订阅特定的事件,则可使用代码更加简明的匿名方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Heater heater = new Heater();
            heater.BoilEvent += delegate(int param)
            {
                Console.WriteLine("Alarm:dididid,水已经{0}℃了", param);
            };

            heater.BoilEvent += delegate(int param)
            {
                Console.WriteLine("Display:水快开了,当前温度为:{0}℃", param);
            };
            heater.BoilWater();
            Console.ReadKey();

            
        }
    }
    public class Heater
    {
        private int temperature;//水温
        public delegate void BoilHandle(int x);//声明关于事件的委托
        public event BoilHandle BoilEvent;//声明水要烧开的事件
        public void BoilWater()
        { //烧水的方法
            for (int i = 0; i <= 100; i++)
            {
                temperature = i;
                if (temperature > 96)
                {
                    if (BoilEvent != null)
                    {
                        BoilEvent(temperature);
                    }
                }
            }
        }

    }
  

}

运行结果
在这里插入图片描述

Lambda表达式

Lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用lambda表达式,可以写入可作为参数传递或作为参数传递或作为函数调用值返回的本地函数。Lambda表达式对于编写LINQ查询表达式特别有用。若要创建Lambda表达式,需要在Lambda运算符=>左侧指定输入参数,然后在另一侧输入表达式或语句块。

实例

lambda表达式x=>x*x指定名为x的参数并返回x的平方值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            Expression<del> myET = x => x * x;
            Console.ReadKey();
        }
    }
}

委托签名具有一个int类型的隐式类型输入参数,并返回int。可以将lambda表达式转换为该类型的委托,因为该表达式也具有一个输入参数(x),以及一个编译器可隐式转换为int型的返回值。
表达式位于=>运算符右侧的lambda表达式称为lambda表达式。表达式lambda广泛用于C#的表达式树的构造。表达式lambda会返回表达式的结果。

实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    class Program
    {
        public delegate bool ShortDelegate(int[] x);
        static void Main(string[] args)
        {
            int[] arr = new int[] { 8, 4, 5, 6, 2, 1, 3, 7, 9, 0 };
            Console.WriteLine("未排序前数组序列为:");
            foreach (int i in arr)
            {
                Console.Write("{0},", i);
            }

            ShortDelegate MyDelegate = array => 
            {
                for (int i = array.GetUpperBound(0); i >= 0; i--)//循环从后向前分别取出数组中的一个元素
                {//冒泡排序,将数值小的元素移到后面,直到所有的元素按照降序排列
                    for (int j = 0; j <= i; j++)
                    {
                        if (array[j] <= array[i])
                        {//交换两个元素位置
                            int z = array[j];
                            array[j] = array[i];
                            array[i] = z;
                        }
                    }
                }
                return true;
            };
            
            MyDelegate(arr);//调用委托排序
            Console.WriteLine("\n排序后数组序列为:");
            foreach (int i in arr)
            {
                Console.Write("{0},", i);
            }
            Console.ReadKey();


        }
    }
    
}

运行结果:
在这里插入图片描述

------------------------------------------------------------------------------------------
                                              分割线
------------------------------------------------------------------------------------------
  • 博主简介:
  • 工业自动化上位机软件工程师、机器视觉算法工程师、运动控制算法工程师。目前从业于智能制造自动化行业。 博主邮箱:2296776525@qq.com
  • 帮忙点个赞吧。哈哈。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值