C#在属性中用Lambda语法

时间:2022-06-21 07:23:54

今天看代码改功能的时候遇到了个比较奇怪的地方,在属性里也能用Lambda,我看了好久,也不是很理解,我都开始怀疑这是不是属性了,又在群里讨论了下这个问题,觉得有必要记下来,因为又涨知识了。

C#在属性中用Lambda语法

问题1:这是个属性么?

这个还是属性,只不过是后边多了个Lambda表达式,=>后边可以理解为一个方法。但是是属性却没有get;set;确实令人不解,所以就又用反编译工具反编译一下。在反编译后的代码里,看到这个的确是一个属性,是一个只有get方法,却没有set方法的属性。

C#在属性中用Lambda语法

问题2:把 => 换成 = 会有什么变化?

  为了便于演示效果,我又重写了个类似的语句。

C#在属性中用Lambda语法

  我们会看到两种写法都不会报错,但是他们的区别是什么呢,接下来继续反编译。

C#在属性中用Lambda语法

C#在属性中用Lambda语法

可以看到用 = 的abc是一个字段,而用 => 生成abc1,是一个只读的属性,看到反编译后的代码,又加深了那个认知,属性本质上就是一个方法。

附:在其他的属性中,我还发现了这种写法。这种用法就是属性直接获取webconfig里面的配置信息,也是一绝。

C#在属性中用Lambda语法

又反编译了一下,发现在这个属性里面并没有 ConfigurationManager.AppSettings["SMS_Sendfrom"]这种内容。

C#在属性中用Lambda语法

总结一下:这些都是C#语法糖的使用,曾经看到一句话,不会委托,泛型,Lambda这种,C#代码是越看越难的。但是这种在属性里用Lambda,我觉得是不太好的,性能问题是其一,最重要的是白白增加复杂程度,真的不利于阅读,维护。像我,看了一会儿,又研究研究,半天快过去了。