zoukankan      html  css  js  c++  java
  • C#高级功能(一)Lambda 表达式

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值

    using System;
    
    namespace NewAttr
    {
        /// <summary>
        /// Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
        /// Lambda 表达式对于编写 LINQ 查询表达式特别有用。
        /// </summary>
        public class LambdaDemo
        {
            public LambdaDemo() { }
            /// 委托不能重载,即委托名称相同,参数类型,个数不同。
            /// 构造委托的时候,根本不管参数,当然也就不知道你要构造的是哪个委托。
            private delegate int del(int x);
            private delegate int del2(int x, int s);
            private delegate void del3();
            public static void Test()
            {
                del myDel1 = x => x * x;
                del myDel2 = (x) => x * x;
                del myDel3 = (x) => x * x;
                del myDel4 = (int x) => x * x;
                del myDel5 = (int x) => { return x * x; };
                Console.WriteLine("del myDel1 = x => x * x :{0}", myDel1(2));
                Console.WriteLine("del myDel2 = (x) => x * x :{0}", myDel2(2));
                Console.WriteLine("del myDel3 = (x) => x * x :{0}", myDel3(2));
                Console.WriteLine("del myDel4 = (int x) => x * x :{0}", myDel4(2));
                Console.WriteLine("del muDel5 = (int x) =>{1}:{0}", myDel5(2), " { return x * x; } ");
                del3 myDel6 = () => Test2();
                Console.WriteLine("--------------------------------");
                myDel6();
            }
    
            public static void Test2()
            {
                del2 myDel2 = (x, y) => x * y;
                del2 myDel3 = (int x, int y) => x * y;
                del2 myDel4 = (int x, int y) => { return x * y; };
                Console.WriteLine("del2 myDel2 = (x, y) => x * y :{0}", myDel2(2, 2));
                Console.WriteLine("del2 myDel3 = (int x, int y) => x * y :{0}", myDel3(2, 2));
                Console.WriteLine("del2 myDel4 = (int x, int y) => {1} :{0}", myDel4(2, 2), "{ return x * y; }");
                Console.WriteLine("--------------------------------");
                FunTest();
            }
    
            public static void FunTest()
            {
                ///其中 Func 是最多具有十六个输入参数的任何一个 Func 委托
                ///之后一个为返回值。
                ///Func<TResult>,Func<T,TResult>,Func<T,.....T,TResult>
                Func<int> myFunc = () => 1;
                Console.WriteLine("Func<int> myFunc = () => 1 :{0}", myFunc());
                Func<int, string, int> myFunc2 = (x, y) => x + y.Length;
                Console.WriteLine("Func<int, string, int> myFunc = (x, y) => x + y.Length :{0}", myFunc2(1, "jasonhua"));
    
                ///其中 Action 是最多具有十六个输入参数的任何一个 Action 委托
                Action myAction = () => { Console.WriteLine("Action myAction :1 * 1"); };
                myAction();
                Action<int, int> myAction2 = (x, y) => { Console.WriteLine("Action<int, int> myAction2 = (x, y) :{0}", x * y); };
                myAction2(1,1);
            }
        }
    } 

    其他的基础功能

    1.  C#高级功能(四)扩展方法和索引

    2. C#高级功能(三)Action、Func,Tuple

    3. C#高级功能(二)LINQ 和Enumerable类

    4. C#高级功能(一)Lambda 表达式

    5. C#中泛型的解释(object,list,var,dynamic的区别)

    6. C#中委托

    7. C#和.NET版本对比

  • 相关阅读:
    java编程题古典算法之兔子问题
    java基础之final关键字
    java基础之final关键字
    java基础之静态代码块,局部代码块,构造代码块区别。
    java基础之静态代码块,局部代码块,构造代码块区别。
    java基础之完数判断
    java基础之完数判断
    java基础之二维数组不定义列数
    正则表达式快速入门
    深入理解JSON对象
  • 原文地址:https://www.cnblogs.com/zhao123/p/5612418.html
Copyright © 2011-2022 走看看