zoukankan      html  css  js  c++  java
  • C# Lambda表达式

    Lambda其实就是匿名函数的缩写,它们实现的功能是一样的,不同的是,它们表达的方式不同,当然它是比匿名函数更简单的一种方法

    public static IEnumerable<Product> Filter(this IEnumerable<Product> productEnum, Func<Product, bool> selectorParam) {
            foreach (Product prod in productEnum) {
                if (selectorParam(prod)) {
                    yield return prod;
                }
            }
        }
    }

    Fileter是对IEnumerable<Product>实现的一个扩展方法,并且这个扩展方法传入一个泛型委托Func<Product,bool> 这个泛型委托传入的是Product.其返回的值是一个Bool值,现在我们用匿名函数的方式来实现这个泛型委托

    Func<Product, bool> fruitFilter = delegate(Product prod) {
        return prod.Category == "水果";
    };

    实例化一个IEnumerable来实现

    IEnumerable<Product> filteredProducts = products.Filter(fruitFilter);

    上面使用的是委托匿名函数的方式来实现了

    接着我们使用Lambda表达式的方式来实现

    Func<Product, bool> fruitFilter = prod => prod.Category == "水果";
    IEnumerable<Product> filteredProducts = products.Filter(fruitFilter);

    这样子是不是代码又简单很多了,而且这两段代码可以进一步简化

    IEnumerable<Product> filteredProducts = products.Filter(prod => prod.Category == "水果");

    语句Lambda

    Lambda表达式分为语句Lambda和表达式Lambda

    语句Lambda 和 表达式Lambda 的区别在于,前者在 =>右边有一个语句块(大括号),而后者只有一个表达式(没有return 和大括号)。

    (1)表达式Lambda:

    list.FindAll(d => d.Id > 2);// goes to
    list.ForEach(d => Response.Write(d.ToString() + "<br/>"));

    (2)语句Lambda:

    list.ForEach(d => { if (d.Id > 2) { Response.Write(d.ToString() + "<br/>"); } });

    Linq

    上面我们实现自定义的查询方式是给IEnumerbale<Product>自定义了一个扩展方法Filter,而Linq中有很多扩展方法,这样就可以大大减少工作量

    一个数据集合

    Product[] products = {
        new Product {Name = "西瓜", Category = "水果", Price = 2.3M}, 
        new Product {Name = "苹果", Category = "水果", Price = 4.9M}, 
        new Product {Name = "空心菜", Category = "蔬菜", Price = 2.2M}, 
        new Product {Name = "地瓜", Category = "蔬菜", Price = 1.9M} 
    };

    如果不使用Linq我们会写一个排序方法类实现prduct的价格从大到小的排序并且还要新建一个Product[]的数组来存放排序好后的数据

    使用Linq

    var results = from product in products
                    orderby product.Price descending
                    select new {
                        product.Name,
                        product.Price
                    };

    另一种

    var results = products
        .OrderByDescending(e => e.Price)
        .Take(3)
        .Select(e => new { e.Name,e.Price});
  • 相关阅读:
    leetcode 350. Intersection of Two Arrays II
    leetcode 278. First Bad Version
    leetcode 34. Find First and Last Position of Element in Sorted Array
    leetcode 54. Spiral Matrix
    leetcode 59. Spiral Matrix II
    leetcode 44. Wildcard Matching
    leetcode 10. Regular Expression Matching(正则表达式匹配)
    leetcode 174. Dungeon Game (地下城游戏)
    leetcode 36. Valid Sudoku
    Angular Elements
  • 原文地址:https://www.cnblogs.com/ilooking/p/4137447.html
Copyright © 2011-2022 走看看