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);
                }
    
     }
  • 相关阅读:
    Android网络开发的那些事儿
    first day to Ruby on rails
    [转]Windows SDK与DirectX SDK集成
    Windows8
    [转]MPI--MPI+VS2010 配置及编译
    codeblock添加头文件路径和静态库路径
    汇编笔记1:debug
    Eclipse Error
    Android SDk 离线安装方法
    求一程序员合租,回龙观东大街地铁站十分钟,精装次卧2000,无需押金,一共两家
  • 原文地址:https://www.cnblogs.com/myLeisureTime/p/13232742.html
Copyright © 2011-2022 走看看