屬性賦初始值的四種寫法 C 6 0新特性

2021-08-29 23:03:34 字數 2802 閱讀 9337

1 介紹

在c# 6.0 語法出來前,屬性的賦初始值使用get;set;雖然已經相對於最原始的寫法簡潔了非常多,但是還不夠,還不夠,還不夠。。。今天剛好一直在想著前幾天朋友問我的有關屬性賦初始值的問題,便自己試了一下,感覺6.0提供了更好的寫法。

2 **

(1)原始寫法

在不知道哪個版本的c# 中,提供了最原始的寫法。那麼上**看一下

private string _text = null;

public string text

set}

這應該是最原始的寫法了,應該也算是最麻煩的一種寫法。但是,接下來所說的所有寫法,都算是語法糖,經過反編譯之後,還是寫成這種寫法。

(2)6.0之前的寫法

不得不提的是,巨硬真的是對開發者真的貼心,雖然經常會好心辦壞事。那麼看一下有了語法糖之後是怎麼寫的

public string text

可以明顯看出來,有了語法糖之後,真的是寫起來非常舒服。那麼就有乙個問題:如果給屬性賦初始值,在6.0語法出來以前,據我所知有兩種

1 、建構函式

2、 不適用這個語法糖,用第一種寫法

按照微軟的貼心程度以及c#在語法糖的道路上越來越遠,在6.0就提供了新的語法糖

(3)屬性允許賦初始值

手握這顆語法糖,那麼就可以使用新的寫法了,那麼來看一下:

public string text

= "王二狗";

可以明顯看出來,這種寫法是比較簡單的。不慌,還有一顆糖可以吃。

(4)在屬性/方法裡面使用lambda表示式

有了這顆糖,我們再來看一下怎麼寫:

public string text => "二狗子";
那麼這句是不是更簡潔了,在6.0中允許使用lambda表示式賦初始值,根據lambda的一系列規則之下,就是這個樣子了。具體lambda的規則,在這裡我就不再詳細解釋了。

3 例子

上面只是最簡單的用法,那麼我們來舉個栗子吧。

找個場景吧:在類裡 ,有乙個屬性text,屬性型別為string

public  string text

現在需要根據string是不是為空來對另乙個屬性flag進行複製。那麼我們看一下應該怎麼寫

(1)   原始寫法

private bool _flag = true;

public bool flag

return false;

}set

}

使用最初的寫法來寫,以前也是一直都這麼寫的,確實是比較麻煩的,寫了幾次都記不住這個寫法。

(2)新語法

public bool flag => text == "" ? true : false;
比較一下吧,想一想,兩種寫法比較一下 ,哪個好很顯然了。

4 總結

有些人數,c#的語法糖太多了,程式設計師都成了傻子了,但是實際用起來,還是會叫真香。

那麼,為什麼我不用2中(3)屬性允許賦初始值這種寫法呢? 因為水平有限,不會寫。 

開玩笑

public bool flag

= text == "" ? true : false;

這種寫法中,text不可引用非靜態字段,這樣的情況下,那麼就需要將text加上乙個static,變為非靜態字段。

好啦 就寫到這裡吧,如有不正確,請指正!

2018.11.07日更新

針對使用orm(主要是用反射)來對屬性進行賦值時,會報錯,進行補充說明。如果不是使用orm進行賦值,且在程式中不對該屬性賦值,則不會報錯。

(1)問題

先說下功能:實體類中有兩個字段,是預設賦值的,原本使用lambda表示式進行賦初始值。

private string chktypebh => string.isnullorempty(parentchenkid) ? "01" : "02";

private string chktypemc => string.isnullorempty(parentchenkid) ? "主動檢查" : "到期複查";

那麼在查詢資料的時候,如果使用orm進行屬性的賦值,會提示未找到屬性設定的方法。

前面我們提到了 ,屬性的get;set;但是這裡只有get,也就是該屬性為唯讀屬性。所以:因為沒有提供set,所以會報錯。

那麼應該怎麼做呢?提供三種思路吧

(1)設定為private

將屬性設定為private,在反射的時候,是只獲取public型別的字段,自然也就不會報錯啦

(2)老老實實重寫吧

採用老方法進行get;set;吧

private string chktypebh;

public string chktypebh

set}

private string chktypemc;

public string chktypemc

set

}

(3)在反射中進行修改

在進行反射賦值時,加一句if(prop.canwrite)判斷即可。

《論交換ab的值的四種寫法》

a a b b int t a a a b b t a a b a b b b t a b t a b b a t a 我們得到a b,b a a a b b a b a a b b b b a b a a b b a a b a a b a按位異或運算子 按位異或運算將兩個運算分量的對應位按位遵照...

SQL中變數賦初始值的重要性

首先準備一些測試資料,create table tynametable idint,typename nvarchar 10 insert into tynametable values 1,射手 insert into tynametable values 10,法師 insert into ty...

SQL Update的四種常見寫法

實驗物件 兩個學生表 1.乙個stu學生表,乙個stu1學生表.2.上述表有三個字段 學生id,學生性別,學生名字 update語句常見場景,分為兩大類 1.單錶update 2.多表關聯update 1.1 單錶update單字段 update stu t set t.name mike wher...