linq Lambd

Lambd是什么?

  1,Lambd只是实例化委托的一个参数,就是一个方法

  lambd是一个匿名方法,但是在程序编译的时候编译会分配一个名字还会产生一个私有密封类(Sealed)

 using System;

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

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

            //调用扩展方法
            int? value = 12312;
            value.ToInt();

            string valuestr = "调用扩展方法";
            valuestr.Tosubstring();

            string valuestr2 = "调用扩展方法调用扩展方法调用扩展方法调用扩展方法调用扩展方法调用扩展方法调用扩展方法调用扩展方法调用扩展方法调用扩展方法";
            valuestr2.Tosubstring();


        }


        public void method()
        {
            /*服务器是强类型语言在编译时没有决定有没有name
           属性在运行时确实有name属性,但是在编译上不通过
           */
            object modle = new
            {
                name = "张三",
                age = 12,
                classId = "高三二班",
            };
            // Console.WriteLine(modle.name);
            /*
             * dynamic  回绕开编译器编译
             * 所以在编译器当中不会报错,但是也有相当的问题
             * 在用户输入错误的时候编译器并不会提示错误信息
             * 很容易出现问题
             */

            dynamic model2 = new
            {
                name = "张三",
                age = 12,
                classId = "高三二班",
            };
            Console.WriteLine(model2.name);


            /*
             var  语法糖在 Framework3.0才有
             方便 匿名类可以不用创建类型
            注意点
            
                1, 匿名类不能重新赋值
                2, var是语法糖根据编译器来决定类型根据右边来编译类型
                3, var的变量是必须初始化的
                
             */

            var model3 = new
            {
                name = "张三",
                age = 12,
                classId = "高三二班",
            };
            Console.WriteLine(model3.name);
            // model3.name = "李四";//不能第二次被赋值
        }

        Action NoReturnWithPara;
        Action<string> ReturnWithParatostr;
        /// <summary>
        /// 委托的匿名方法
        /// </summary>
        private void BInd()
        {

            ///多播委托
            NoReturnWithPara = () => { };
            NoReturnWithPara += this.Say;
            NoReturnWithPara -= this.Say;

            NoReturnWithPara.Invoke();

            ReturnWithParatostr = (x) => { Console.WriteLine($"是谁在耳边说爱{x}永不变"); };
            ReturnWithParatostr += Sayvalue;
            ReturnWithParatostr.Invoke("LMZ");

        }

        private void Say()
        {
            Console.WriteLine("亮堂堂");
        }
        private void Sayvalue(string value)
        {
            Console.WriteLine($"{value}在唱亮堂堂");
        }

    }

    /*
     * 扩展方法
     * 要点 必须在静态类 和静态方法方法中才能调用
     *      想要快捷在第一个参数前面增加 this 

* * * 外部调用 */ public static class extendmethod { public static int ToInt(this int? number) { return number ?? 0; } public static string Tosubstring(this string values ,int maxLength = 15) { if (values.Length> maxLength) { values = values.Substring(0, maxLength); } return values; } } }
  yield函数


/// <summary>
/// http://www.cnblogs.com/YamatAmain/p/5016464.html
/// 
/// 含有yield的函数说明它是一个生成器,而不是普通的函数。当程序运行到yield这一行时,该函数会返回值,并保存当前域的所有变量状态;
/// 等到该函数下一次被调用时,会从上一次中断的地方开始执行,一直遇到下一个yield, 程序返回值, 并在此保存当前状态; 如此反复,直到函数正常执行完成。
/// 
/// 迭代器模式是设计模式中行为模式(behavioral pattern)的一个例子,他是一种简化对象间通讯的模式,也是一种非常容易理解和使用的模式。
/// 简单来说,迭代器模式使得你能够获取到序列中的所有元素 而不用关心是其类型是array,list,linked list或者是其他什么序列结构。
/// 这一点使得能够非常高效的构建数据处理通道(data pipeline)--即数据能够进入处理通道,进行一系列的变换,或者过滤,然后得到结果。事实上,这正是LINQ的核心模式。
/// 在.NET中,迭代器模式被IEnumerator和IEnumerable及其对应的泛型接口所封装。如果一个类实现了IEnumerable接 口,那么就能够被迭代;
/// 调用GetEnumerator方法将返回IEnumerator接口的实现,它就是迭代器本身。迭代器类似数据库中的游标,他是 数据序列中的一个位置记录。
/// 迭代器只能向前移动,同一数据序列中可以有多个迭代器同时对数据进行操作。
/// </summary>

 

//需要使用IEnumerable来承接  并使用yield 关键字返回 并且使用是才会调用相关信息数据

/// <summary>
/// yield获取数据
/// </summary>
/// <returns></returns>
public IEnumerable<int> YieldMethod()
{
int counter = 0;
int result = 1;
while (counter++ < 10)
{
Thread.Sleep(1000);
Console.WriteLine($"获取{counter}次数据");
result = result * 2;
yield return result;
}
}

 
  
 




 

posted @ 2021-01-05 00:16  YZM_Leo  阅读(67)  评论(0)    收藏  举报