c# 3新增了關鍵字「var」。在編譯器能明確判斷變數的型別時,它允許對本地型別進行推斷。然而,對於何時應該使用它卻存在某些爭論。\
開發ide工具的公司resharper的ilya ryzhenkov總結了使用var的一些好處 :
\
\ 1. 它有利於更好地為本地變數命名。\2. 它有利於設計更好的api。
3. 它促使對變數進行初始化。
4. 它消除了**的混亂。
5. 它不需要using指示符。
rss bandit的dare obasanjo對此則不敢苟同。由於var給他的開源專案(譯註:rss bandit專案使用了resharper)帶來了不利影響,他隨後發表了對ryzhenkov觀點的回應 。他回擊道:
\
\有趣的是,這裡列出的所有「好處」,主要針對的不僅是形式上的改進,而且它們之間還相互矛盾。例如,ryzhenkov宣稱var有利於對「更好地為本地變數命名」,這實際上意味著迫使開發人員使用更長的匈牙利風格的變數命名。頗為滑稽的是,這種長的變數名完全會加劇**的混亂,因為這樣的變數名是隨處可見的,相比而言,只有在宣告變數的時候顯示單個的型別名,會保持**的整潔。那種var有利於「設計更好的api」的觀點實際上如出一轍。因為這種觀點主張,如果要求開發人員使用更長的描述性屬性名(例如使用xmlnode.xmlnodename,而不是xmlnode.name),就會達到改進的目的。或許應該有人告知resharper的人員,這種將型別資訊編碼到變數名中的方式實在是糟透了,而這也正是我們首選強型別程式語言例如c#的原因所在。
\
\\此外,鼓勵變數初始化的主張也顯得有些不可思議,因為c#編譯器對此是強制要求的。更重要的是,在使用變數之前,通常需要將變數初始化為null,而var關鍵字對此卻不支援。
\
官方c#語言參考中的一行內容佐證了dare的觀點:
\
\\過度使用var會使得源**晦澀難懂。只有在必要的時候,才推薦使用var,也就是說當變數用來儲存乙個匿名型別或者匿名型別集合的時候。
\
對於那種var會降低**可讀性的抱怨,並非人人都贊同。arnon rotem-gal-oz寫道:
\
\\對於**可讀性的主張,我更傾向於專注更加強大的方法,例如保持方法簡短,有意義的方法和變數名,以及支援測試(這實際上可以幫助你理解**是如何運作的……)不僅如此,如果你真的非常非常需要**可讀性,resharper工具可以在你的滑鼠移動到var關鍵字之上時,告訴你它的型別;)
\
chris sutton似乎更進一步,含蓄地指出型別是無關緊要的。
\
\檢視英文原文:c# debate: when should you use var?那麼,我的建議是只有當你不知道型別的時候,才使用var。這裡是我不同的見解和用法。請看如下**片斷:
\ var procs = from p in servicecontroller.getservices()
where p.status == servicecontrollerstatus.running
select p;
procs.tolist().foreach(p=\u0026gt; console.writeline(p.servicename));
\ procs的型別無疑為ienumerable\u0026lt;servicecontroller\u0026gt;,然而這卻與我無關。我首先關注的是procs是乙個列表,列表中的每一項都具有乙個屬性servicename。潛在的型別對於編譯器很重要,而那些不得不去閱讀**的人們卻不是編譯器,對嗎?
\
什麼時候才應該使用HBase?
張貴賓guibin.beijing gmail.com 在使用hbase一定要明白hbase的適用場合,因為hbase並非適用於每種情況。如果有幾億或者幾十億條記錄要存入hbase,那麼hbase就是乙個正確的選擇 否則如果你僅有幾百萬條甚至更少的資料,那麼hbase當然不是正確的選擇,這種情況下應...
什麼時候才應該使用HBase?
在使用hbase一定要明白hbase的適用場合,因為hbase並非適用於每種情況。如果有幾億或者幾十億條記錄要存入hbase,那麼hbase就是乙個正確的選擇 否則如果你僅有幾百萬條甚至更少的資料,那麼hbase當然不是正確的選擇,這種情況下應當選擇傳統的關係型資料庫,因為如果這麼少的資料存入hba...
什麼時候才應該使用HBase?
在使用hbase一定要明白hbase的適用場合,因為hbase並非適用於每種情況。如 果有幾億或者幾十億條記錄要存入hbase,那麼hbase就是乙個正確的選擇 否則如果你僅有幾百萬條甚至更少的資料,那麼hbase當然不是正確的選 擇,這種情況下應當選擇傳統的關係型資料庫,因為如果這麼少的資料存入h...