zoukankan      html  css  js  c++  java
  • C# 3.0中的操作符=>

    偶然间发现一条语句, 里面的一个操作符让我吓了一跳, "=>". 这是个什么东西? 查了一下才知道这玩意儿叫Lambda Expressions.

    也就是C#2.0中的匿名方法.

    举例如下:

    public void test()
            {
                string[] list = new string[] { "abc", "12", "java" };
                string[] ll = Array.FindAll(list,
                    delegate(string s) { return s.IndexOf("a") >= 0; }
                    );
                foreach (string var in ll)
                {
                    Console.WriteLine(var);
                }
                Console.ReadLine();
            }

    上面的代码段使用的是C#2.0的匿名方法.

    下面的是一个等效的例子, 该例子使用C#3.0的Lambda Expressions

    public void test2()
    {
        string[] list = new string[] { "abc", "12", "java" };
    
        string[] ll = Array.FindAll(list, 
            s => (s.IndexOf("a") >= 0)
            );
        foreach (string var in ll)
        {
            Console.WriteLine(var);
        }
        Console.ReadLine();
    }

    从上述两个例子我们可以看出:

    从代码书写角度,代码可读性角度来说:Lambda表达式 比匿名方法更简单了。

    而 Lambda表达式 和 匿名方法都是干的同一件事情,让我们少写一个函数定义。函数的调用和函数的实现在一起完成了。

    Lambda表达式的书写格式如下:

    (参数列表) => 表达式或者语句块

    其中:

    参数个数:可以有多个参数,一个参数,或者无参数。

    参数类型:可以隐式或者显式定义。

    表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体)。

    一些Lambda表达式的书写范例:

    有两个参数的 Lambda表达式例子:

    注:别看比较复杂,LINQ中实际把 下述代码中的 delegate ,DoSomeThing 替你做了,所以你写代码的时候只需要写

    var t = DoSomeThing<int>(7, 8, (x, y) => x * y); 这么一行。

    public delegate T Test01<T>(T t1, T t2);
    class Program
    {
        private static T DoSomeThing<T>(T t1, T t2, Test01<T> match)
        {
            return match(t1, t2);
        }
    
        static void Main(string[] args)
        {
            var t = DoSomeThing<int>(7, 8, (x, y) => x * y);
            Console.WriteLine(t);
            Console.ReadLine();
        }
    }

    下面这些写法也是对的(你只需要修改Main函数中的代码,其他地方不需要动):

    var t = DoSomeThing<int>(7, 8, (int x, int y) => x * y);
    var t = DoSomeThing<string>("7", "8", (x, y) => x + y);

    或者我们写一个更复杂的: => 右边是一段语句块。

    var t = DoSomeThing<int>(7, 8, (x, y) => { if (x < 5) { return (x + 8) * y; } else { return y; } });

    最前面的例子是一个参数的例子,我们就不举一个参数的例子了,下面举一个没有参数的例子:

    public delegate void Test02();
    class Program
    {
        private static void DoSomeThing(Test02 match)
        {
            match();
        }
    
        static void Main(string[] args)
        {
            DoSomeThing(() => Console.WriteLine("jajaja"));
            Console.ReadLine();
        }
    }

    函数式编程

    匿名方法,Lambda表达式 都是函数式编程思想下的产物,

    函数式编程如果从概念角度来理解,比较晦涩,简单来说:

    函数式编程的主要特点就是没有变量,所有算法都用递归函数来书写。整个程序除了定义函数就是调用函数,没有其他类型的语句。

    注: 例子是我从网上抄来的.

    源文地址:http://space.itpub.net/?uid-12641349-action-viewspace-itemid-145373

  • 相关阅读:
    《编程珠玑,字字珠玑》读书笔记完结篇——AVL树
    中国人,不能自卑,要自强于世界民族之林
    做饭方法
    创建一个强名称密钥文件+ 如何在 Visual C# .NET 中将程序集安装到全局程序集缓存中
    .Net 题目
    页面传值的另一种办法
    成功的12条黄金法则
    English学习资料大全
    .NET中的Serialization
    页面标签使用 实现定位
  • 原文地址:https://www.cnblogs.com/awpatp/p/1529666.html
Copyright © 2011-2022 走看看