• Lambda表达式


    自c#3.0开始,就可以使用一种新语法把实现代码赋予委托:Lambda表达式。只要有委托参数类型的地方,就可以使用Lambda表达式。Lambda运算符“=>”的左边列出了需要的参数,Lambda运算符的右边定义了赋予Lambda变量的方法的实现代码。

    参数
    Func<String, String> one = s => string.Format("change uppercase {0}",s.ToUpper());
    Console.WriteLine(one("test"));
    如果委托使用多个参数就把参数放在花括号中。
    Func<double, double, double> two = (x, y) => x * y;
    Console.WriteLine(two(9,99));
    为了方便,可以在花括号中给变量名添加参数类型。
    Func<double, double, double> twoWithTypes = (double x, double y) => x * y;
    Console.WriteLine(twoWithTypes(9, 969));

    多行代码
    如果Lambda表达式只有一条语句,在方法块内就不需要花括号和return语句,因为编译器会添加一条隐式的return语句。

            Func<string, string> lambda = (string param) => {
                param = "this is a good";
                param += " and this was added to the string";
                return param;
            };
    

    闭包
    通过Lambda表达式可以访问Lambda表达式块外部的变量。这称为闭包
    int some=8;
    Func<int,int> f=x=>x+some;

     如下展示的是c#5.0版本中编译后的结果为10,20,30,40。若使用4.0之前的版本结果输出为40四次。
            var values = new List<int>() { 10,20,30,40};
            var funcs = new List<Func<int>>();
            foreach (var item in values)
            {
                funcs.Add(()=>item);
            }
            foreach (var item in funcs)
            {
                Console.WriteLine(item());
            }
  • 相关阅读:
    vue使用watch 观察路由变化,重新获取内容
    Intellij IDEA 最新旗舰版注册激活破解(2018亲测,可用)
    前端开发浏览器兼容问题
    基于Docker搭建MySQL主从复制
    js获取计算后的样式表
    js对象取值的两种方式
    js中的style与jQuery中的css
    js页面加载函数
    代码中jndi数据源的支持
    Oracle中的sid与servicename
  • 原文地址:https://www.cnblogs.com/caozhengze/p/10004044.html
Copyright © 2020-2023  润新知