C#Lambda表达式学习日记

Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.NET委托类型的使用。

现在,如果我们要使用泛型 List<> 的 FindAll() 方法,当你从一个集合去提取子集时,可以使用该方法。

// 该方法唯一的参数是一个System.Predicate<T>类型的泛型委托
public List<T> FindAll(Predicate<T> match);

// 该委托指向任意以类型参数作为唯一输入参数并返回bool的方法
public delegate bool Predicate<in T>(T obj);

在调用 FindAll() 时,List<T>中每一项都将传入Predicate<T> 对象所指向的方法。方法在实现时将执行一些计算,来判断传入的数据是否符合标准,并返回 true / false,如果返回 true ,该项被添加到表示自己的List<T>集合中。

现在,我们需要从一个List<int>集合中找到所有偶数,该如何实现呢?

1.传统方法

public class MyDelegateSyntax
{public static void Show()
    {
        Console.WriteLine("fun with lambdas");

        List<int> list = new List<int> { 20, 1, 4, 8, 9, 77 };

        Predicate<int> callback = new Predicate<int>(IsEvenNumber);

        // 传统方法
        List<int> evenList = list.FindAll(callback);

        Console.WriteLine();

        foreach (int item in evenList)
        {
            Console.WriteLine(item);
        }
    }

    private static bool IsEvenNumber(int obj) => obj % 2 == 0;
}

2.匿名方法

public class MyDelegateSyntax
{  public static void Show()
    {
        Console.WriteLine("fun with lambdas");

        List<int> list = new List<int> { 20, 1, 4, 8, 9, 77 };

        // 匿名方法
        List<int> evenList = list.FindAll(delegate (int i)
        {
            return i % 2 == 0;
        });

        Console.WriteLine();

        foreach (int item in evenList)
        {
            Console.WriteLine(item);
        }
    }
}

3.Lambda表达式

public class MyDelegateSyntax
{
    public static void Show()
    {
        Console.WriteLine("fun with lambdas");

        List<int> list = new List<int> { 20, 1, 4, 8, 9, 77 };

        // Lambda表达式
        // 隐式,编辑器会更具上下文表达式推断i的类型
        List<int> evenList = list.FindAll(i => i % 2 == 0);

        // 显式
        // 描述:我的参数列表(一个整形i)将会被表达式(i%2)==0处理
        List<int> evenList1 = list.FindAll((int i) => i % 2 == 0);

        // 我的参数列表(一个整形i)将会被表达式(i%2)==0处理

        Console.WriteLine();

        foreach (int item in evenList)
        {
            Console.WriteLine(item);
        }
    }
}

 4.使用多个语句处理参数(“{}”)

public class MyDelegateSyntax
{
    public static void Show()
    {
        Console.WriteLine("fun with lambdas");

        List<int> list = new List<int> { 20, 1, 4, 8, 9, 77 };

        // 多个处理语句 语句块 {}
        List<int> evenList = list.FindAll(i =>
       {
            Console.WriteLine(i);
            return i % 2 == 0;
        });

        Console.WriteLine();

        foreach (int item in evenList)
        {
            Console.WriteLine(item);
        }
    }
}

5.含有多个(或零个)参数的Lambda表达式

public class MyDelegateSyntax
{
    public delegate string VerySimpleDelegate();

    public delegate void MathMessage(string msg, int result);

    public static void Show()
    {
        Console.WriteLine("fun with lambdas");
        // 多个参数的Lambda
        MathMessage mm = new MathMessage((msg, result) => Console.WriteLine($"msg:{msg} result:{result}"));
        mm("adding has cmpleted", 1 + 5);

        // 0个参数Lambda
        VerySimpleDelegate d = new VerySimpleDelegate(() => "enjoy you string");
        Console.WriteLine(d.Invoke());
    }
}

学无止境,望各位看官多多指教。

时间: 2024-10-21 22:00:26

C#Lambda表达式学习日记的相关文章

java lambda表达式学习笔记

lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射人先射马,擒贼先擒王.学习一个库要学习它的入口类.lambda的入口类是Stream,一看Stream中的函数就会发现Function,Predicate等lambda元素. 一.几个概念     函数式接口 Functional Interface,除了static和default类型的方法外,只有一个函数

java 8 中lambda表达式学习

转自 http://blog.csdn.net/renfufei/article/details/24600507 http://www.jdon.com/idea/java/10-example-of-lambda-expressions-in-java8.html Lambda表达式的语法基本语法:(parameters) -> expression或(parameters) ->{ statements; } 下面是Java lambda表达式的简单例子: // 1. 不需要参数,返回值

WPF-MVVM模式学习笔记4——Lambda表达式学习

在学习MVVM的过程中,其中自定义了一个超类NotificationObject,如下 public abstract class NotificationObject : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual void RaisePropertyChanged(string propertyName) { PropertyChang

lambda表达式学习笔记(1) -- 作为委托的lambda表达式

C#中的Lambda表达式就是C# 2中匿名方法的演变,因此从一个匿名函数开始一步步简化写法. 例子是获取一个string参数,然后返回一个int. 首先匿名方法的写法如下: Func<string, int> returnLength; returnLength = delegate (string text) { return text.Length; }; Console.Write(returnLength("Hello")); lambda表达式最冗长的形式是:

C++11 lambda表达式学习

lambda表达式是函数式编程的基础.咱对于函数式编程也没有足够的理解,因此这里不敢胡言乱语,有兴趣的可以自己查找相关资料看下.这里只是介绍C++11中的lambda表达式自己的认识.这里有参考文档http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2927.pdf 给出两个例子,可以看出lambda表达式的写法 [](int x, int y) { return x + y; } [](int x, int y) -> int {

lambda表达式学习笔记

lambda表达式用于简化某些匿名内部类的写法: 1.无参函数的简写 new Thread(new Runnale(){ @overrie public void run(){ } }).start();\\ new Thread( () -> { .. ... }.start(); 2.带参数的简写 Collections.sort(list, new Comparator<String>(){// 接口名 @Override public int compare(String s1,

Lambda表达式学习篇二(流-上)

一.从外部迭代到内部迭代 使用for循环计算伦敦的艺术家人数: int count=0; for(Artist artist:allArtists){ if(artist.isFrom("London")){ count++; } } 每次迭代集合类时,都需要写较多样本代码. 调用iterator,产生一个新的Iterator对象,进而控制整个迭代过程,这就是外部迭代. int count=0; Iterator<Artist> iterator=allArtists.it

#Python中lambda表达式学习

#出处:http://mp.weixin.qq.com/s?__biz=MjM5NzU0MzU0Nw==&mid=202117122&idx=1&sn=1cf1f3f8abce89850da0da685ba4e771#rd#lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去.#lambda表达式是起到一个函数速写的作用.允许在代码内嵌入一个函数的定义.#例如:f=lambda x,y,z:x+y+zprint f(1,2,3)#用lam

python第l六天,lambda表达式学习,涉及filter及Map。

在python中lambda表达式可以作为匿名函数来使用,举一个简单的栗子: 以前我们写两个数相加的函数需要 #以前我们写两个数相加的函数,需要这样写 >>> def sum(x,y): return x+y >>> sum(1,2) 3 >>> #而学了lambda之后我们再写这个函数可以这么写 >>> x=lambda x,y:x+y >>> x(1,2) 3 >>> python对我们以后的编