第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

在C#中使用var關(guān)鍵字

在C#中使用var關(guān)鍵字

九州編程 2019-05-30 12:42:34
在C#中使用var關(guān)鍵字在與同事討論了在C#3中使用‘var’關(guān)鍵字之后,我想知道人們對通過var進(jìn)行類型推斷的適當(dāng)使用有什么看法?例如,我在有問題的情況下懶洋洋地使用var,例如:-foreach(var item in someList) { // ... } // Type of 'item' not clear.var something = someObject.SomeProperty;  // Type of 'something' not clear.var something = someMethod(); // Type of 'something' not clear.更合理地使用var的方法如下:var l = new List<string>(); // Obvious what l will be.var s = new SomeClass(); // Obvious what s will be.有趣的是,LINQ似乎有點(diǎn)灰色,例如:-var results = from r in dataContext.SomeTable               select r; // Not *entirely clear* what results will be here.很清楚結(jié)果是什么,因?yàn)樗鼘⑹且环N實(shí)現(xiàn)IEnDigable的類型,但是在聲明新對象的var的方式上,這并不是完全顯而易見的。更糟糕的是,當(dāng)涉及LINQto對象時(shí),例如:-var results = from item in someList              where item != 3               select item;這并不比等量的preach(在某些列表中的var項(xiàng)){/.)等價(jià)物。這里有一個(gè)關(guān)于類型安全性的真正關(guān)注-例如,如果我們將該查詢的結(jié)果放置到一個(gè)重載的方法中,該方法接受IEnDigable<int>和IEnDigable<Double>,調(diào)用者可能會無意中傳遞錯(cuò)誤的類型。var 是嗎?保持強(qiáng)類型,但問題是類型在定義上不立即顯現(xiàn)是否危險(xiǎn),當(dāng)重載意味著當(dāng)您無意地將錯(cuò)誤類型傳遞給方法時(shí),這種情況會被放大。
查看完整描述

4 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

我還是覺得var在某些情況下可以使代碼更易讀。如果我有一個(gè)帶有Orders屬性的Customer類,并且我想將它賦值給一個(gè)變量,我只需要這樣做:

var orders = cust.Orders;

我不在乎顧客。訂單是IEnumerable<Order>ObservableCollection<Order>BindingList<Order>-我只想把這個(gè)列表保存在記憶中,然后迭代它,或者得到它的計(jì)數(shù)或其他東西。

將上述聲明與下列聲明進(jìn)行對比:

ObservableCollection<Order> orders = cust.Orders;

對我來說,這個(gè)類型的名字就是噪音。如果我回去決定改變客戶的類型。ObservableCollection<Order>IList<Order>)然后我也需要修改聲明-如果我一開始就使用var,我就不用修改聲明了。


查看完整回答
反對 回復(fù) 2019-05-30
?
湖上湖

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è)地方被提及)。


查看完整回答
反對 回復(fù) 2019-05-30
?
慕容森

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

在我看來,在C#中好東西TM。任何這樣類型的變量仍然是強(qiáng)類型的,但是它從定義它的賦值的右邊獲得它的類型。因?yàn)轭愋托畔⒃谟疫吺强捎玫?,所以在大多?shù)情況下,也必須在左側(cè)輸入類型信息是不必要的,而且過于冗長。我認(rèn)為這大大提高了可讀性而不降低類型安全性。

在我看來,從可讀性角度看,對變量和方法使用良好的命名約定比顯式類型信息更重要。如果我需要類型信息,我總是可以懸停在變量(在VS中)并得到它。但是,通常情況下,對于讀者來說,顯式類型信息不應(yīng)該是必需的。對于開發(fā)人員來說,無論變量是如何聲明的,在VS中仍然可以獲得IntelliSense。盡管如此,在某些情況下,顯式聲明類型仍然是有意義的-也許您有一個(gè)返回List<T>,但你想把它當(dāng)作IEnumerable<T>用你的方法。為了確保您使用的是接口,聲明接口類型的變量可以使其顯式化?;蛘?,你可能想聲明一個(gè)沒有初始值的變量-因?yàn)樗鼤⒓吹玫揭粋€(gè)基于某種條件的值。在這種情況下,你需要類型。如果類型信息有用或必要,請繼續(xù)使用它。不過,我覺得這通常是不必要的,而且在大多數(shù)情況下,沒有它的代碼更容易閱讀。


查看完整回答
反對 回復(fù) 2019-05-30
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊

這兩種說法都不是絕對正確的;var對可讀性有積極和消極的影響。照我的想法,var當(dāng)下列任何一項(xiàng)為真時(shí),應(yīng)使用:

  1. 這種類型是匿名的(嗯,你在這里別無選擇,因?yàn)樗?/trans>

    在這種情況下是可變的)
  2. 根據(jù)指定的表達(dá)式(即

    var foo = new TypeWithAReallyLongNameTheresNoSenseRepeating())

var沒有任何性能影響,因?yàn)樗恼Z法糖;編譯器推斷和定義類型,一旦它被編譯成IL;沒有什么其實(shí)關(guān)于它的動態(tài)。


查看完整回答
反對 回復(fù) 2019-05-30
  • 4 回答
  • 0 關(guān)注
  • 599 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號