有时候,我们需要封装一组数据,只有数据,没有方法,并且只用于当前程序,不需要在项目间重用,这时候,如果是传统的使用类来封装的话,大概会是下面这种样子:
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. 输出,变量的使用,子查询,逻辑语句,循环,case..when..then..end多分支语句,Exists(判断存在)

    --------------输出----------------print 'hello world'--以文本形式输出select 'hello world'--以网格形式输出,也可以设置成以文本形 ...

  2. Asp.Net MVC5入门学习

    添加一个Controller(控制器) 因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用来便于我们的开发,要是对MVC概念还有点模糊的 ...

  3. glibc-2.19 之 strlen 实现

    前几天遇到一个有意思的问题,实现strlen 不考虑线程安全: 下面是我的实现: size_t strlen(const char* s) { const char* p = s; while (*p ...

  4. Visual Studio 20**自动添加头部注释信息

    关于Visual Studio 20**自动添加头部注释信息   作为一个万年潜水党,不关这一篇文章技术含量如何,也算是一个好的开始吧.   在日常的开发中我们经常需要为类库添加注释和版权等信息,这样 ...

  5. 关于HTTP头标

    对于HTTP中的头字段,我表示真的好麻烦,特找来一段资料共享.希望能对大家有用. HTTP的头域包括通用头,请求头,响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成.域名是大小写 ...

  6. Dynamics CRM 2013 体验

    CRM 2013终于可以下载了,赶紧下载安装. 在CRM 2011 的基础上,CRM 2013 在UI上有了很大的变化.从CRM 2011 RollUp 12开始,微软就放弃了按钮的立体效果,逐渐趋向 ...

  7. Kraken.js!

    Hello Kraken.js! 前言 kraken.js 由paypal 公司开源的一个用于快速开发基于Express.js框架应用的快速开发工具, 因为kraken 并没有在Express.js基 ...

  8. Apache指南:CGI动态页面

    概要 相关模块 相关指令 mod_alias mod_cgi AddHandler Options ScriptAlias CGI(公共网关接口[Common Gateway Interface])定 ...

  9. 如何将 Area 中的 Controller 放到独立的程序集?

    目录 背景如何将 Area 中的 Controller 放到独立的程序集?备注 背景返回目录 本文假设您已经熟悉了 ASP.NET MVC 的常规开发方式.执行模型和关键扩展点,这里主要说一下如何使用 ...

  10. 2012 T-SQL 新特性 and O2O项目

    SQL Server 2012 T-SQL 新特性 NoSQL之HBase   9月初淘宝飞芃做了一个关于HBase的分享,讲的激情飞扬,让听众收益匪浅,现做下简单总结. HBase是一个NoSQL数 ...