zoukankan      html  css  js  c++  java
  • 《深入浅出理解C#》 一、使用Comparison进行排序和使用Predicate循环打印、处理未知数据和可选参数及默认值

    一、Comparison

    Comparison方法定义:比较两个同一类型的方法

    代码(委托方法):

    public delegate int Comparison<in T>(T x, T y);

    sort方法(参数为Comparison):

    public void Sort(Comparison<T> comparison);

    使用范例:

    List<Product> products = Product.GetSampleProducts();
    products.Sort((x, y) => x.name.CompareTo(y.name));
    foreach (Product product in products)
    {
          Console.WriteLine(product);
    }

    二、Predicate

    Predicate方法定义:表示定义一组条件并确定指定对象是否符合这些条件的方法

    代码(委托方法):

    public delegate bool Predicate<in T>(T obj);

    Action方法(封装一个方法,该方法只有一个参数并且不返回值):

    public delegate void Action<in T>(T obj);

    使用范例:

    List<Product> products = Product.GetSampleProducts();
    Predicate<Product> test = delegate(Product p) { return p.price > 10m; };
    List<Product> matches = products.FindAll(test);
    
    Action<Product> print = Console.WriteLine;
    matches.ForEach(print);

    通过FindAll和ForEach来分解问题,先定义筛选方法,通过FindAll方法查询,再定义一个print行为,通过ForEach方法进行打印

    FindAll代码:

    public List<T> FindAll(Predicate<T> match);

    ForEach代码:

    public void ForEach(Action<T> action);

    三、未知数据、可选参数和默认值

    List<Product> products = Product.GetSampleProducts();
    foreach (Product product in products.Where(p => p.price == null))
    {
         Console.WriteLine(product);
    }
    
    public class Product 
    {
                public string name{get;private set;}
                //允许为null值
                public decimal? price{get;private set;}
    
                public Product() { }
                //c#4增加参数默认值
                public Product(string name, decimal? price=null)
                {
                    this.name=name;
                    this.price=price;
                }
    
                public static List<Product> GetSampleProducts()
                {
                    return new List<Product>
                    {
                        new Product(name:"West Side Story",price:9.99m),
                        new Product(name:"Assassins",price:14.99m),
                        new Product(name:"Frogs",price:13.99m),
                        new Product(name:"Sweeney Todd",price:10.99m),
                        new Product(name:"Bney")
                    };
                }
    
                public override string ToString()
                {
                    return string.Format("{0}:{1}", name,price);
                }
    
     }
  • 相关阅读:
    02_Docker在CentOS 6和CentOS 7下的安装
    01_Docker概念简介、组件介绍、使用场景和命名空间
    nginx配置
    JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》
    关于最近的一些事情
    3、《构》-3习题(6-9)
    关于叛逆的疑问和感想
    2、《构》-3习题(1-5)
    1、随笔+《构》-3
    svn 迁移至git操作手册
  • 原文地址:https://www.cnblogs.com/myLeisureTime/p/13232742.html
Copyright © 2011-2022 走看看