有时候,我们需要封装一组数据,只有数据,没有方法,并且只用于当前程序,不需要在项目间重用,这时候,如果是传统的使用类来封装的话,大概会是下面这种样子:
internal class SomeData
{
  //定义一系列私有成员变量
  //创建属性来封装每一个数据成员
  //重写方法的ToString()来输出每一个数据成员
  //重写GetHashCode() 及Equals()来实现基于值的相等性
}
这个虽然不难,但如果数据量比较多,显然写起来就比较麻烦了。因此,C#3.0以后提供了一个叫匿名类型的机制,来简化这一任务。如下:
var myCar = {Color="Black",Make="China",Name="Puma",Price=5000000);
    这就是一个匿名类型的对象!因为这个类并没有具体的类型名可用,因此,这时是var派用场的好时候。C#编译器在编译时会自动生成名称唯一的一个类,并且所有的成员变量都自动在后台被封装为属性。所有的匿名类型都直接继承自System.Object,并且重写了方法Equals(),GetHashCode(),ToString()等方法。其中,ToString()是根据每一个成员变量的名称、值对,生成一个拼接字符串。
当定义了两个相同的字段、值对的匿名对象时,用Equals()比较,就会发现它们是相等的。但是,这时的 == , != 运算符是不能用的,因为编译器并没有自动重载这些。
当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型相同时,编译器就会只生成一个类定义,而不是各一个。
匿名类型对象中仍然可以再包含匿名对象。
在LINQ中,匿名类型又会派上大用场!!!
总结:匿名方法本质上是一传递给委托的代码块,是使用委托的另一种方法。
规则:
1、匿名方法中不能使用跳转语句跳至次匿名方法的外部,反之亦然;匿名方法外部的跳转语句也不能跳转到匿名方法的内部;
2、在匿名方法的内部不能访问不安全的代码。另外,也不能访问在匿名方法外部定义的ref和out参数。
3、可以使用在匿名方法外部定义的其他变量。
 
拉姆达表达式:就是匿名方法,只是语法不同。
(param)=>expr
param是输入参数列表,expr是一个表达式或者一系列语句。
规则:
1、在一个具有唯一的显示类型参数的Lambda表达式中,圆括号可以从参数列表中删除。
2、当输入参数不唯一时,括号不能省略。
3、输入参数列表中的各参数可以显式指定类型,也可以省略参数类型,具体类型通过类型判断机制判断。
4、expr可以只包含一个计算表达式,也可以包含一系列语句,只是语句需要包含在大括号中。
expr 为语句的时候:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace DelegateSample
{
    public delegate void PrintDelegate(string content);
    class Program
    {
        static void Main(string[] args)
        {
            PrintDelegate pd = (string str) =>
            {
                    System.Console.WriteLine("Printing...");
                    System.Console.WriteLine("Content:{0}", str);
             };
            pd("The quick brown fox jumps oyer a lazy dog.");    
        }     
    }
}

C# 匿名方法和拉姆达表达式的更多相关文章

  1. C#拉姆达(=>)表达式

    前言: 之前小猪曾经分享过自己对C#委托的一点理解 其实在使用委托的过程中我们会大量的使用拉姆达(=>)表达式 介绍: "Lambda表达式"是一个匿名函数,是一种高效的类似 ...

  2. SqlSugar常用查询实例-拉姆达表达式

    SqlSugar支持拉姆达表达式查询,匿名对象参数等,相对还是比较方便好用的. 一.查询列表: //查询列表 SqlSugarClient db = SugarContext.GetInstance( ...

  3. 拉姆达表达式(Lambda Expressions)

    上面两种写法是一样的 ,拉姆达表达式也是一种委托, 但引用的是匿名方法

  4. 如何用拉姆达表达式(Lambda Expressions) 书写左链接查询

    在C#中,如果要实现两个列表的左链接查询,我们的一般用法就是用的linq表达式就是 List<Pet> pets = }, }, } }; List<Pet2> pets2 = ...

  5. EasyUI 之 DataGrid利用用拉姆达表达式实现分页查询

      首先,我们在DataGrid的URL中加上我们要查询的条件:查询用户名不是“呵呵”的所有用户. <div> <table id="dg" class=&quo ...

  6. Lambda拉姆达表达式

    拉姆达表达式常用于委托,也就是说拉姆达表达式是匿名函数,简单点就是函数. a => a.Equals("string"); //原形为: (a) => { return ...

  7. .net 在同步方法中使用拉姆达表达式执行async/await异步操作

    代码如下: static void Main(string[] args) { ((Action)(async () =>{ var data = await HttpHelper.GetOnS ...

  8. (转)拉姆达表达式(Lambda Expressions) =>写法的涵义

      lambdaclass编译器 让我们先看一个简单的拉姆达表达式: x=>x/2 这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值. 通过这个拉姆达表达式,我们可以看到: 这 ...

  9. c# 拉姆达表达式实现List去重

    c# 拉姆达表达式实现List去重 var list = studentlist.OrderByDescending(a => a.CreateDate).ToList(); Console.W ...

随机推荐

  1. 自己动手实现Expression翻译器 – Part Ⅱ

    上一节我们了解了Linq查询大体上是如何运转的,并针对SQL表达式进行建模(DbExpression),这一节的重点在于如何将表达式转换为DbExpression. 可以说只要能生成结构清晰的DbEx ...

  2. Node填坑教程——整理文件

    如果你能把所有代码写进一个文件,并且能很好的管理.协调.多人开发.那么可以跳过这期(请务必带我飞). 我们接着完善上期的代码,给代码分家. node并没有启动入口,更没有固定的项目结构,文件配置.这些 ...

  3. iOS基础 - iOS程序启动原理

    一.UIApplicationMain 在main.m的main函数中执行了UIApplicationMain这个方法,这是ios程序的入口点 int UIApplicationMain(int ar ...

  4. c# 自定义多选下拉列表2

    以下为工作中遇到的,备注一下 先需要几个辅助类 #region GripBounds using System.Drawing; internal struct GripBounds { ; ; pu ...

  5. 一维数组的 K-Means 聚类算法理解

    刚看了这个算法,理解如下,放在这里,备忘,如有错误的地方,请指出,谢谢 需要做聚类的数组我们称之为[源数组]需要一个分组个数K变量来标记需要分多少个组,这个数组我们称之为[聚类中心数组]及一个缓存临时 ...

  6. 筛法求质——poj2262&2909

    这两道题都是哥赫巴德猜想的内容.基本的技术点都是在一个很大的数字范围里面求质数.直接判断两个数是不是质数,这种方法虽然可行但是还是很慢的.所以这两题我们使用打表! 而建立质数表的方法就是筛法求质,速度 ...

  7. wpf中数据绑定(Datacontext)的应用

    在winform开发中,我们常用到ado.net进行数据绑定,在编程技术日新月异的今天,这种繁杂的数据绑定方式已不能再适合开发人员,于是微软推出了wpf,更炫的界面美化,更简洁地编写控件,在wpf中使 ...

  8. 【转】title与alt的区别

    html中的title属性和alt属性让人有些混淆. 以前不知道有title这个属性,第一次用到它时,就和alt产生了混淆.一位朋友告诉我说,alt是图片img标签里用的,title是超链接里用的,当 ...

  9. java并发之固定对象与实例

    java并发之固定对象与实例 Immutable Objects An object is considered immutable if its state cannot change after ...

  10. jquery mobile扁平化设计样式--Jquery mobile Flat UI介绍

    jquery mobile扁平化设计样式--Jquery mobile Flat UI介绍 这几天开发的web app使用了jquery mobile,jquery mobile自带的样式比较适合做企 ...