2008-08-19 39 views

回答

35

這當然是風格的問題,但我同意Dare:C# 3.0 Implicit Type Declarations: To var or not to var?。我認爲使用VAR一個明確的類型讓你的代碼少readable.In下面的代碼代替:

var result = GetUserID(); 

是什麼結果呢?一個int,一個字符串,一個GUID?是的,這很重要,不,我不應該深入瞭解代碼。這在代碼示例中尤其令人討厭。

傑夫寫了這個帖子,說he favors var。但那傢伙瘋了!

我正在看到一個用於stackoverflow成功的模式:根據問題挖掘舊的CodingHorror帖子和(Jeopardy風格)短語。

+8

爲什麼不修改變量的名稱而不是抱怨var? var userID = GetUserID(); 如果userID是字符串或int,它並不是非常重要,它是標識用戶並且應該被相關函數接受的東西。 – 2008-09-22 06:39:00

2

我有一種感覺,這將是堆棧溢出問題隨着時間的推移最流行的問題之一。它歸結爲偏好。無論你怎麼看都更可讀。我更喜歡var,因爲它更簡潔,因此類型在右側定義。當我從方法調用分配變量時,我使用顯式類型聲明。

0

「最佳風格」是主觀的,因環境而異。

有時,使用'var'會比使用一些非常長的類名稱或者不確定給定函數的返回類型更容易。我發現我在使用Linq或for循環聲明時更多地使用'var'。

其他時候,使用完整的類名更有用,因爲它比'var'更好地記錄代碼。

我覺得這是由開發人員來做出決定。沒有銀彈。沒有「一個真正的方式」。

乾杯!

0

不是不是總是但我會盡可能說很多時間。類型聲明並不比匈牙利語更有用。你仍然有同樣的問題,即類型可能會發生變化,而重構工具有助於它不是理想的,相比於不需要更改指定類型的地方,除了在一個地方,不要重複自己原理。

其中一個類型的名稱可以爲變量和它的值都指定的任何單行語句應該肯定使用var,尤其是當它是一個long類型的變量時。 >

2

有@Coding Horror

個人而言,我儘量保持它的使用到最低限度上這是一個很好的討論,我發現從分配的方法調用一個變量時,它傷害可讀性特別。

4

@jongalloway - var不一定會讓你的代碼更難讀。

var myvariable = DateTime.Now 
DateTime myvariable = DateTime.Now; 

首先就是作爲第二爲可讀,並需要更少的工作

var myvariable = ResultFromMethod(); 

在這裏,你有一個點,VAR可以使代碼的可讀性。我喜歡var,因爲如果我將小數改爲double,我不必在一堆地方去改變它(並且不要說重構,有時我會忘記,只是讓我var!)

編輯:剛剛閱讀文章,我同意。大聲笑。

1

像ReSharper這樣的工具的一個優點是,你可以編寫代碼,不管你喜歡什麼,然後重新格式化爲更可維護的東西。我將R#設置爲始終重新格式化,以便使用的實際類型可見,但是,在編寫代碼時,我幾乎總是鍵入'var'。

好工具讓你擁有兩全其美。

John。

0

有一個關於該主題的really good MSDN article的,你不能使用VAR它列出了一些情況:

以下限制適用於隱式類型的變量聲明:

  • var can only be used when a local variable is declared and initialized in the same statement; the variable cannot be initialized to null, or to a method group or an anonymous function.
  • var cannot be used on fields at class scope.
  • Variables declared by using var cannot be used in the initialization expression. In other words, this expression is legal: int i = (i = 20); but this expression produces a compile-time error: var i = (i = 20);
  • Multiple implicitly-typed variables cannot be initialized in the same statement.
  • If a type named var is in scope, then the var keyword will resolve to that type name and will not be treated as part of an implicitly typed local variable declaration.

我會建議您檢查它瞭解在代碼中使用var的全部含義。

10

我只有在var清楚的時候才使用它。

明確對我說:

XmlNodeList itemList = rssNode.SelectNodes("item"); 
var rssItems = new RssItem[itemList.Count]; 

我不明白:

var itemList = rssNode.SelectNodes("item"); 
var rssItems = new RssItem[itemList.Count]; 
0

I'm seeing a pattern for stackoverflow success: dig up old CodingHorror posts and (Jeopardy style) phrase them in terms of a question.

我不認罪!但你是對的,這似乎是一個相對普遍的小問題。

9

我看到的答案的最佳總結是Eric Lippert's comment,基本上說你應該使用具體類型,如果它是重要的類型是什麼,但不是。基本上類型信息應該保留給類型重要的地方。

我公司的標準是使用無處不在,我們在reading various recommendation and then spending some time trying it out to see whether the lack of annotated type information was a help or a hindrance後來到。我們覺得這是一個幫助。

人們建議鏈接的大多數建議(例如Dare的建議)都是由從未嘗試使用var代替具體類型編碼的人員提出的建議。這使得建議幾乎毫無價值,因爲他們不是憑經驗發言,而只是外推。

我可以給你的最好建議是自己嘗試一下,看看你和你的團隊有什麼作用。

1

只有在事先不知道類型時纔有意義。