今天看代碼改功能的時候遇到了個比較奇怪的地方,在屬性里也能用Lambda,我看了好久,也不是很理解,我都開始懷疑這是不是屬性了,又在群里討論了下這個問題,覺得有必要記下來,因為又漲知識了。

問題1:這是個屬性么?
這個還是屬性,只不過是后邊多了個Lambda表達式,=>后邊可以理解為一個方法。但是是屬性卻沒有get;set;確實令人不解,所以就又用反編譯工具反編譯一下。在反編譯后的代碼里,看到這個的確是一個屬性,是一個只有get方法,卻沒有set方法的屬性。
問題2:把 => 換成 = 會有什么變化?
為了便於演示效果,我又重寫了個類似的語句。
我們會看到兩種寫法都不會報錯,但是他們的區別是什么呢,接下來繼續反編譯。
可以看到用 = 的abc是一個字段,而用 => 生成abc1,是一個只讀的屬性,看到反編譯后的代碼,又加深了那個認知,屬性本質上就是一個方法。
附:在其他的屬性中,我還發現了這種寫法。這種用法就是屬性直接獲取webconfig里面的配置信息,也是一絕。
又反編譯了一下,發現在這個屬性里面並沒有 ConfigurationManager.AppSettings["SMS_Sendfrom"]這種內容。
總結一下:這些都是C#語法糖的使用,曾經看到一句話,不會委托,泛型,Lambda這種,C#代碼是越看越難的。但是這種在屬性里用Lambda,我覺得是不太好的,性能問題是其一,最重要的是白白增加復雜程度,真的不利於閱讀,維護。像我,看了一會兒,又研究研究,半天快過去了。