zoukankan      html  css  js  c++  java
  • 匿名类、类初始化器、lamdba

    1匿名类:没有名字的类!

    var obj = new { name = "zhangsan", id = 5 };
    Console.WriteLine(obj.id);
    Console.WriteLine(obj.name);

    var objt = new { dd = 1, xx = "t", fd = false };
    Console.WriteLine(objt.fd);
    Console.WriteLine(objt.dd);
    Console.WriteLine(objt.xx);

    2类初始化器:

    先定义一个类:

    class Person
    {
    public string Name;
    public int ID;
    }

    下面就是对Person类初始化,只是在实例化的时候进行对对象进行赋值。

    List<Person> list = new List<Person>() {
    new Person() { Name ="zhangsan",ID=1},//Person后面的括号可以省略。
    new Person(){Name="lisi",ID=2},
    new Person{Name="wangwu",ID=3
    }};
    foreach (var it in list)
    {
    Console.WriteLine(it.Name + ":" + it.ID);
    }

    输出:

    zhangsan:1
    lisi:2
    wangwu:3

    3.lambda:本质就是一个匿名方法。

     为了理解lambda,下面先来一个delegate:

    public delegate int FuncSummary(int a, int b);

    public delegate int sumData(int a);

    class Program
    {
    static void Main(string[] args)
    {

    FuncSummary func = delegate(int a, int b) { return a + b; };//匿名函数
    Console.WriteLine(func(1, 2));


    FuncSummary func1 = (int a, int b) => a + b;//lambda 本质是一个匿名方法;
    Console.WriteLine(func1(1, 3));

    FuncSummary func2 = (a, b) => a + b;//int 也可以省略
    Console.WriteLine(func2(3, 4));



    //sumData f = a => a * 10;//1
    sumData f = b => b * 10;//2 ;// 1 和 2比较之下,可以说明=>号前面可以放任意参数;对于b这个参数的个数和类型,是有委托定义时参数的个数和类型所决定的;
    Console.WriteLine(f(100));

    }

    4.对于lambda的简单应用:

    List<string> listStr = new List<string>() { "1", "2", "3", "4", "5" };
    // listStr的FindAll方法中传入 Predicate<T> match 这个东西是一个委托类型,所以在这个方法中可以传入一个lambda!
    //传入参数为泛型T,在listStr.FindAll()的这个方法的参数中Predicate<string> match,返回一个list<string>集合;
    var listData = listStr.FindAll(a => int.Parse(a) > 2);
    foreach (var item in listData)
    {
    Console.WriteLine(item);
    }

    ---

    public delegate string Func(int a, int b);

    static void Main(string[] args)
    {
    Func sum = (c, b) =>
    {
    if (c > b)
    {
    return (c + b).ToString();
    }
    else
    {
    return (c - b).ToString();
    }

    };
    Console.WriteLine(sum(1, 2));
    Console.ReadKey();
    }

    到此可以了,这个东西在于理解,理解后就好了!

    ////FindAll();为传入一个listStr中的string类型,返回list<T>类型的数据;
    //var data = listStr.FindAll(delegate(string strTemp) { if (int.Parse(strTemp) > 2)return true; else return false; });
    //foreach (var item in data)
    //{
    // Console.WriteLine(item.ToString());
    //}

  • 相关阅读:
    pygame 笔记-7 生命值/血条处理
    pygame 笔记-6 碰撞检测
    pygame 笔记-5 模块化&加入敌人
    pygame 笔记-4 代码封装&发射子弹
    tk.mybatis通用插件updateByPrimaryKeySelective无法自动更新ON UPDATE CURRENT_TIMESTAMP列的解决办法
    pygame 笔记-3 角色动画及背景的使用
    pygame 笔记-2 模仿超级玛丽的弹跳
    pygame 笔记-1 按键控制方块移动
    mysql技巧:如果记录存在则更新/如果不存在则插入的三种处理方法
    mac上mysql8.0以tar.gz方式手动安装
  • 原文地址:https://www.cnblogs.com/LpRightNow/p/2837736.html
Copyright © 2011-2022 走看看