计算机语言lambda,Lambda表达式 - 浅谈领域特定语言

本文介绍了Lambda表达式在C#中的应用,对比了传统匿名方法的冗长语法,展示了Lambda如何简化FindAll()等方法的调用。Lambda表达式以其简洁的语法(如i => (i % 2) != 0)提高了代码可读性,其参数类型由编译器推断,使得代码更加紧凑。文章还提到了领域驱动设计和在项目中使用Linq的场景,并探讨了使用LinqPad进行查询测试的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lambda表达式

Lambda表达式语法看上去真怪异,说白了是更好的匿名方法。废话不多说,先来看看使用匿名方法:

//首先使用集合初始化语法建立一个整型列表

List《int》 list = new List《int》() { 1, 2, 3, 4, 5, 6, 7 };

//匿名方法粉墨登场

List《int》 oddNumbers = list.FindAll(

delegate(int i)

{

return (i % 2) != 0;

}

);//匿名方法结束

foreach (var oddNumber in oddNumbers)

{

//输出奇数

Console.WriteLine(oddNumber);

}

观察上面的匿名方法,我们使用delegate,而且还要保证输入参数的类型匹配,这种语法确实还是让人觉得冗长。下面看看Lambda表达式是如何简化FindAll()方法的:

//通过Lambda表达式就一句就搞定了!多神奇啊!传统的委托语法通通消失了

List《int》 oddNumbers = list.FindAll(i =》 (i % 2) != 0);

解剖Lambda表达式

i =》 (i % 2) != 0

你一定注意到了Lambda表达式的 =》 标记(读作 goes to),它的前面是一个参数列表,后面是一个表达式。

很明显,前面的参数列表并没有定义参数的类型(由编译器根据上下文推断出i是一个整型),所以它是隐式的。当然,我们也可以显示定义: (int i)=》(i%2)!=0);

我们这里参数列表只有一个参数,所以那个括号可以被省略。

Linq

自己也没有把所有资料都看完,个人对于Linq的用法大致是这样设想的,我们在做项目时会建立许多聚合根,如果我们的查询会跨多个聚合根则使用存储过程,否则使用Linq进行查询。Linq有个LinqPad的小工具用于测试,

聚合与组合

组合的话是类似共生共灭的关系,例如大雁和大雁的翅膀。对于我们营收系统来说,就好比营业账和营业账子表

而聚合则没有这么强的从属关系,比如用户和册本信息,册本信息作为一个用户的只读属性存在,但也可以单独操作册本信息。

账户可以独立存在,但用户又有一个账户信息的只读属性

系统架构

这里说的系统架构主要是逻辑上的分层,不是物理上的。主要是想利用Entity Framework在系统架构里面,替换以前的codesmith生成entity和dal,同时想引入领域模型的概念,不直接操作entity framework中的对象,而是对应的领域模型。对于领域驱动设计我会在后面的领域驱动设计的文章中介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值