zoukankan      html  css  js  c++  java
  • 新语法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Collections;

    namespace 新语法
    {
    static class Program
    {
    static void Main(string[] args)
    {
    //2.1 调用带参数默认值的方法,编译后悔自动添加默认值到这个方法的括号中
    // TestPareDafaule();
    //2.2 通过命名参数调用此方法
    // TestPareDafaule(18); //第一个赋值
    //使用 命名参数为 方法的指定参数 赋值 其他的使用默认值
    //TestPareDafaule(gender: true);//给第二个赋值
    //TestAnoyclass();
    //InvoExtenMethod();
    // TestAction();
    // TestPreDicate();
    // TestCompaison();
    Order();
    Console.ReadLine();


    }


    static List<Dog> GetDogList()
    {
    return new List<Dog>()
    {
    new Dog(){Id=1, Age=3,Name="爱琴",Gender=true},
    new Dog(){ Id=2,Age=5,Name="娟娟",Gender=true},
    new Dog(){ Id=3,Age=1,Name="丽丽"},
    };
    }

    static List<DogToy> GetDogTryList()
    {
    return new List<DogToy>()

    {

    new DogToy(){ DogId=1, ToyName="骨头" } ,
    new DogToy(){ DogId=1, ToyName="骨头2" } ,
    new DogToy(){ DogId=2,ToyName="fas"} ,

    new DogToy(){ DogId=3,ToyName="dew"},
    };
    }
    #region 1 隐私变量
    //1 因素变量
    //var 变量不能作为 全局变量使用
    static void TestVar()
    {
    var a = 1;
    a = a + 2;

    var b = "";
    b = "123123";
    Console.WriteLine(b);

    }
    #endregion

    #region 2 带默认值的参数
    static void TestPareDafaule(int age = 18, bool gender = false)
    {
    Console.WriteLine(age + ":" + gender);
    }

    #endregion
    #region 3.1 属性初始话器
    /// <summary>
    /// 属性初始话器
    /// </summary>
    static void TestProperty()
    {
    //属性初始化器
    Dog d = new Dog() { Name = " 1" };
    //编译后相与
    Dog d1 = new Dog();
    d1.Name = "1";

    }
    #endregion
    #region 3.2 集合初始化器
    /// <summary>
    /// 3.2 集合初始化器
    /// </summary>
    static void TestInitLIs()
    {
    List<Dog> d = new List<Dog>()
    {
    new Dog(){ Age=1,Name="1"},
    new Dog(){Age=2,Name="2"}
    };
    //编译后相当与
    List<Dog> list = new List<Dog>();
    list.Add(new Dog() { Age = 2, Name = "2" });

    }
    #endregion
    #region 4 匿名累
    /// <summary>
    /// 匿名累
    /// </summary>
    static void TestAnoyclass()
    {
    //4,1 匿名类你编译后 会生成一个类 包含二个只读 变量 和只读属性 并重写了Object的所有方法
    var cla = new { Name = "asd", Age = 23 };
    var cla2 = new { Name = "asd", Age = 23 };
    //4.2如果另一个匿名类对象的属性 类型 和顺序一样 那么会空用同一个匿名类
    Console.WriteLine(cla.GetType() == cla2.GetType());//true
    Console.WriteLine(cla.Name + ":" + cla.Age);

    // 如果另一个匿名类 对象的属性 名称和属性一样但类型不一样,那么还是使用相同的匿名类.只不过泛型参数不同而已
    var cls4 = new { Name = "asd", Age = "23" };
    // 4.3 如果属性名相同 类型相同 但是顺序不同 也会新创建匿名类
    var cls3 = new { Age = 23, Name = "sad" };

    }
    #endregion

    //委托 本质是类 (内部类)
    public delegate void DGTest(string str);
    #region 5 匿名方法
    /// <summary>
    /// 匿名方法(指针)
    /// </summary>
    static void TestMethod()
    {
    //匿名方法 编译后 会生成一个编译器取名的静态方法 和一个静态的委托对象

    //5.1使用委托 直接指定 命名方法
    DGTest dg = new DGTest(TestMthod2);

    //5.2 使用委托 传入匿名方法
    DGTest dg2 = new DGTest(delegate(string str) { Console.WriteLine("我是匿名方法"); });

    //5.3 使用 InvokeMthtod方法 传入匿名方法
    InvokeMthtod(delegate(string srt) { Console.WriteLine("匿名方法" + srt); });
    InvokeMthtod(delegate { Console.WriteLine("我省去了形参了"); });

    }

    static void TestMthod2(string str)
    {

    }
    static void InvokeMthtod(DGTest dg)
    {

    dg("哈哈");
    }


    #endregion

    #region 6 扩张方法
    /// <summary>
    /// 6 扩张方法
    /// </summary>
    static void InvoExtenMethod()
    {

    //List<Dog> list = new List<Dog>()
    //{
    // new Dog (){ Age=11, Name="das"} ,
    // new Dog (){ Age=121, Name="da4s"} ,
    // new Dog (){ Age=131, Name="da4s"} ,
    //};
    //IEnumerable<Dog> enu = list.Where(delegate(Dog d) { return d.Age > 44; });
    //foreach (Dog d in enu)
    //{
    // Console.WriteLine(d.Name + ":" + d.Age);
    //}

    Dog d = new Dog() { Name = "小白", Age = 20 };
    d.Pee(DateTime.Now);
    //编译后: 就是直接调用 这个静态方法 并将当前对一个对象做为 第一个参数传过去

    DogExtension.Pee(d, DateTime.Now);

    //可以让空引用 调用扩张方法 如果扩张方法中 传入了实例 则会抱空指针 异常
    Dog d2 = null;
    d2.Pee(DateTime.Now);

    //扩张方法可以被继承
    FlowDog f = new FlowDog();
    f.Pee(DateTime.Now);

    }
    #endregion

    #region 7.1系统泛型委托 无返回值 Action
    /// <summary>
    /// 系统泛型委托 Action 委托 无返回值 遍历
    /// </summary>
    static void TestAction()
    {
    List<Dog> list = GetDogList();
    list.ForEach(new Action<Dog>(delegate(Dog d)
    {
    Console.WriteLine(d.Name + "," + d.Age);
    }));

    //简写
    list.ForEach(delegate(Dog d)
    { Console.WriteLine(d.Name + "," + d.Age); }
    );

    }
    #endregion

    #region 7.2 Predicate 带返回值的
    static void TestPreDicate()
    {
    List<Dog> list = GetDogList();
    list = list.FindAll(new Predicate<Dog>(delegate(Dog g) { return g.Age > 0; })


    );
    //简写
    // FindAll 就可以帮助我们 根据条件筛选出一个新的集和 符合我们的条件
    list = list.FindAll(delegate(Dog d) { return d.Age > 1; });
    foreach (Dog item in list)
    {

    Console.WriteLine(item.Age + "," + item.Name);
    }

    //自己的方法实现
    list.MyFindAll(delegate(Dog g) { return g.Age > 1; });

    }
    /// <summary>
    /// 自己实现 FindAll方法
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="list"></param>
    /// <param name="predicate"></param>
    /// <returns></returns>

    static List<T> MyFindAll<T>(this List<T> list, Predicate<T> predicate)
    {
    // 创建新集合
    List<T> newlist = new List<T>();
    foreach (T item in list)
    {
    //如果老集合中的item 符合条件则 吧item添加到新集合中
    //调用传入的 predicate 方法 作为是否符合条件的判断
    if (predicate(item))
    {
    newlist.Add(item);
    }

    }
    return newlist;

    }
    #endregion


    #region 7.3 系统泛型委托 Sort
    /// <summary>
    /// 系统泛型委托 Sort
    /// </summary>
    static void TestCompaison()
    {
    List<Dog> list = GetDogList();
    list.Sort(delegate(Dog x, Dog y) { return x.Age - y.Age; });
    list.ForEach(delegate(Dog d) { Console.WriteLine(d.Age + "," + d.Name); });


    }

    #endregion
    #region 7.4 泛型委托 自定义返回值类型 Func
    /// <summary>
    /// 泛型委托 自定义返回值类型 Func
    /// </summary>
    static void TestFun()
    {
    List<Dog> list = GetDogList();
    // list.Select(new Func<Dog, SmallDog>(delegate(Dog d) { return new SmallDog() { Name = d.Name }; }));

    // IEnumerable<SmallDog> enuNew= list.Select(delegate(Dog d) { return new SmallDog() { Name = d.Name }; });


    List<SmallDog> list2 = list.MySelect<Dog, SmallDog>(
    new Func<Dog, SmallDog>(delegate(Dog d)
    {
    return new SmallDog() { Name = d.Name };

    })

    );

    //将 dog 集合 转成 smalldog
    list.MySelect<Dog, SmallDog>(delegate(Dog d) { return new SmallDog() { Name = d.Name }; });
    }

    static List<TR> MySelect<T1, TR>(this List<T1> list, Func<T1, TR> func)
    {

    List<TR> listNew = new List<TR>();
    //遍历老集合
    foreach (T1 item in list)
    {
    //调用func 委托 将老集合元素 转成另一个元素返回
    TR re = func(item);
    //将转换后的元素 存入新集合中
    listNew.Add(re);

    }
    //返回新集合
    return listNew;

    }

    #endregion
    #region 7.5 Func 集合 匿名类
    /// <summary>
    /// Function
    /// </summary>
    static void TestFuncReturnAnoyClassList()
    {
    List<Dog> list = GetDogList();
    //业务 ; 将dog 集合 转成包含 狗名字的 对象集合
    //使用slect 方法 遍历list 集合 并转成一个匿名类对象的集合
    list.Select(delegate(Dog d)
    {
    return new { Age = d.Age, Date = DateTime.Now };

    });

    }


    #endregion
    #region 7.5lambda
    /// <summary>
    ///
    /// </summary>
    static void TestLambda()
    {

    List<Dog> list = GetDogList();
    list.ForEach(delegate(Dog d) { Console.WriteLine(d.Name); });

    //Lambda 语句
    list.ForEach(d => Console.WriteLine(d.Name));
    list.FindAll(d => d.Age > 1);
    list.Sort((x, y) => x.Age - y.Age); //2个参数 就不能去 去括号
    var ir= list.Select(d=>new SmallDog(){ Name=d.Name
    }) ;
    //多条语句的时候 还的必须加大括号
    // lambda 表达式
    list.Select(d =>
    {
    SmallDog sd = new SmallDog();
    sd.Name = d.Name;
    return sd;

    });

    }

    #endregion

    #region 8 标准化查询运算符
    /// <summary>
    /// 查询方法
    /// </summary>
    static void SQOWher()
    {
    List<Dog> list = GetDogList();
    List<Dog> listdog = list.Where(d => d.Gender == true && d.Age > 2 && d.Age < 22).ToList();

    list.ForEach(d => Console.WriteLine(d.ToString()));
    }
    #endregion

    /// <summary>
    /// select 投射方法
    /// </summary>
    static void SQOSelect()
    {

    List<Dog> list = GetDogList();
    list.Select(d=>new SmallDog(){ Name=d.Name});


    }
    static void Order()
    {

    List<Dog> list = GetDogList();
    //升序
    // List<Dog> listsort=list.OrderBy(d => d.Age).ToList();
    //降序
    List<Dog> listsort = list.OrderByDescending(d => d.Age).ToList();
    //多条件排序
    List<Dog> listsort2 = list.OrderByDescending(d => d.Age).ThenBy(d => d.Id).ToList();
    listsort.ForEach(d => Console.WriteLine(d.ToString()));
    }

    static void TestJoin()
    {
    List<Dog> listDog = GetDogList();
    List<DogToy> listToy = GetDogTryList();
    //连接查询 返回的是一个匿名类集合
    var list= listDog.Join(listToy, d => d.Id, t => t.DogId, (d, t) => new { Dogid = d.Id, Dogname = d.Name, toname = t.ToyName }).ToList();


    list.ForEach(a => Console.WriteLine(a.Dogname));

    }
    /// <summary>
    /// 分组
    /// </summary>
    static void TestGroupby()
    {
    List<Dog> list = GetDogList();
    IEnumerable<IGrouping< bool,Dog>> it= list.GroupBy(d => d.Gender);

    IList<IGrouping<bool ,Dog>> listGrop=it.ToList();
    foreach (var item in listGrop)
    {
    Console.WriteLine("小组" + item.Key);
    foreach (Dog item2 in item)
    {
    Console.WriteLine(item2.ToString());

    }

    }

    }
    static void SOQPageList()
    {
    List<Dog> list = GetDogList().OrderBy(d => d.Id).ToList();

    //假设每行2页
    var pageone = list.Skip(0).Take(2);

    var pagetwo = list.Skip(0).Take(2);


    }

    /// <summary>
    /// Linq语句
    /// </summary>
    static void Linq()
    {

    List<Dog> list = GetDogList();
    List<DogToy> listToys = GetDogTryList();

    //将 老集合中查出每一个元素 放到新的集合中
    var dogs1 = from d in list select d;
    //wher 条件的 老集合中查出每一个元素 放到新的集合中
    var dogs = from d in list where d.Gender = false select d;
    //排序 order

    var dog2 = from d in list orderby d.Age orderby d.Name descending select d;
    //连接查询
    var joinlist = from a in list join t in listToys on a.Id equals t.DogId select new { Dogs = a, names = t };
    foreach (var item in joinlist)
    {
    Console.WriteLine(item.ToString());
    }
    //分组
    var group = from d in list group d by d.Gender;
    foreach (var item in group)
    {

    Console.WriteLine(item.Key);
    foreach (var item2 in item)
    {
    Console.WriteLine(item2.ToString());

    }
    }


    }

    }
    }

  • 相关阅读:
    LED事件
    CSR8670按钮事件
    编译提示:warning: ISO C89 forbids mixed declarations and code
    C#使用Smtp,通过qqmail发送邮件
    编写VS的Snippet
    WPF的Clipboard.SetText()有问题
    HttpListenerRequest.ContentEncoding
    jQuery的Deferred对象教程
    visual studio如何修改c++项目的.net framework框架版本
    如何让Sqlite支持Entity Framework Code-First
  • 原文地址:https://www.cnblogs.com/cdaq/p/3597455.html
Copyright © 2011-2022 走看看