4 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
var
var orders = cust.Orders;
IEnumerable<Order>
, ObservableCollection<Order>
BindingList<Order>
ObservableCollection<Order> orders = cust.Orders;
ObservableCollection<Order>
IList<Order>

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
我用var
廣泛地。有人批評說,這會降低代碼的可讀性,但沒有理由支持這種說法。
誠然,這可能意味著不清楚我們正在處理的是哪種類型的問題。那又怎么樣?這實(shí)際上是解耦設(shè)計(jì)的要點(diǎn)。在處理接口時(shí),您強(qiáng)調(diào)的是不對變量的類型感興趣。var
更進(jìn)一步,沒錯(cuò),但我認(rèn)為從可讀性的角度來看,這個(gè)論點(diǎn)是一樣的:程序員實(shí)際上不應(yīng)該對變量的類型感興趣,而應(yīng)該對變量的類型感興趣。是嗎?。這就是為什么微軟也稱類型推斷為“鴨子輸入”。
所以,當(dāng)我使用var
?很簡單,不管IntelliSense告訴我什么都行。任何忽略IDE的關(guān)于C#的推理都不符合現(xiàn)實(shí)。實(shí)際上,每個(gè)C#代碼都是在支持IntelliSense的IDE中編寫的。
如果我使用的是var
聲明變量并混淆變量的存在,我的代碼有一些根本問題。var
不是病因,它只會使癥狀明顯。別怪信使。
現(xiàn)在,C#團(tuán)隊(duì)發(fā)布了一份編碼指南,聲明var
應(yīng)只用于捕獲創(chuàng)建匿名類型的LINQ語句的結(jié)果(因?yàn)樵谶@里,除了var
)。去他的吧。只要C#團(tuán)隊(duì)沒有給我一個(gè)合理的理由來支持這個(gè)準(zhǔn)則,我就會忽略它,因?yàn)樵谖业穆殬I(yè)和個(gè)人看來,這純粹是胡說八道。(對不起,我沒有相關(guān)指南的鏈接。)
實(shí)際上,有一些(表面上)好解釋為什么你不應(yīng)該用var
但我仍然認(rèn)為他們在很大程度上是錯(cuò)誤的。以“searchabililty”為例:作者聲稱var
很難找到MyType
被利用了。右(邊),正確的。接口也是如此。實(shí)際上,我為什么要知道這個(gè)類是在哪里使用的呢?我可能更感興趣的是它在哪里被實(shí)例化,這仍然是可搜索的,因?yàn)樵谀硞€(gè)地方必須調(diào)用它的構(gòu)造函數(shù)(即使這是間接的,類型名稱也必須在某個(gè)地方被提及)。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
List<T>
IEnumerable<T>

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
var
var
這種類型是匿名的(嗯,你在這里別無選擇,因?yàn)樗?/trans> 必
在這種情況下是可變的) 根據(jù)指定的表達(dá)式(即 var foo = new TypeWithAReallyLongNameTheresNoSenseRepeating()
)
var
- 4 回答
- 0 關(guān)注
- 599 瀏覽
添加回答
舉報(bào)