• 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);
            }
        }
    }
  • 相关阅读:
    简单的REST的框架实现
    将 Shiro 作为一个许可为基础的应用程序 五:password加密/解密Spring应用
    Java自注三进入
    hdu 4803 贪心/思维题
    SSH框架总结(框架分析+环境搭建+实例源代码下载)
    Rational Rose 2007 &amp;Rational Rose 2003 下载及破解方法和汉化文件下载
    hdu 5014 思维题/推理
    电脑蓝屏出现事件7000
    大豆生物柴油驱动的大巴斯(Bus)
    POJ 3481 &amp; HDU 1908 Double Queue (map运用)
  • 原文地址:https://www.cnblogs.com/hachun/p/4325460.html
Copyright © 2020-2023  润新知