zoukankan      html  css  js  c++  java
  • Lambda表达式

      Lambda 表达式是一种可用于创建委托表达式目录树类型的匿名函数通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。

    若要创建 Lambda 表达式,需要在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值。

    代码示例1:

    delegate int del(int i);
    static void Main(string[] args)
    {
        del myDelegate = x => x * x;
        int j = myDelegate(5); //j = 25
    }

    语句 lambda 的主体可以包含任意数量的语句;但是,实际上通常不会多于两个或三个。

    delegate void TestDelegate(string s);
    …
    TestDelegate myDel = n => { 
                 string s = n + " " + "World";
                 Console.WriteLine(s); 
        };
    myDel("Hello");

    LINQ 查询代码示例

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Reflection;
    
    namespace PLINQExample
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            /// <summary>
            /// 代码演示 将一个顺序查询转换成并行查询
            /// 查询的是本程序集中定义的所有过时(obsolete)方法
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                Assembly assembly = Assembly.GetEntryAssembly();
    
                var query =
                    from type in assembly.GetExportedTypes().AsParallel()
    
                    from method in type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static)
    
                    let obsoleteAttrType = typeof(ObsoleteAttribute)
    
                    where Attribute.IsDefined(method, obsoleteAttrType)
    
                    orderby type.FullName
    
                    let obsoleteAttrObj = (ObsoleteAttribute)Attribute.GetCustomAttribute(method, obsoleteAttrType)
    
                    select String.Format("Type = {0}
    Method = {1}
    Message = {2}
    ", 
                                          type.FullName, method.ToString(), obsoleteAttrObj.Message);
    
                // 显示结果
                foreach (var result in query)
                    MessageBox.Show(result);
                
                // 这个方法允许多个线程同时处理结果
                //query.ForAll(Whatever.MakeTip);
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                Whatever.MakeTip("过时方法");
            }
        }
    
        // 第二个参数若设置为true,则将使用已过时的元素视为错误
        [Obsolete("该类已经过时", false)]
        public class Whatever
        {
            // 定义过时方法
            // [Obsolete]
            [method: Obsolete("该方法已经过时")]
            public static void MakeTip(string sMsg)
            {
                MessageBox.Show(sMsg);
            }
        }
    }
  • 相关阅读:
    quick cocos2dx 播放序列帧动画的实现
    PS学习笔记
    python自学笔记(十一)关于函数及书写格式
    python自学笔记(十)语句与数据结构应用
    python自学笔记(九)python练习题
    python自学笔记(八)python语句
    python自学笔记(七)排序与多级排序
    python自学笔记(六)二进制与位移
    python自学笔记(五)python文本操作
    python自学笔记(四)python基本数据类型之元组、集合、字典
  • 原文地址:https://www.cnblogs.com/hachun/p/4325460.html
Copyright © 2011-2022 走看看