2009-07-27 49 views
6

唯一的好處,我可以看到的事:什麼是隱式類型的優勢的C#3.0> +

var s = new ClassA(); 

ClassA s = new ClassA(); 

是,以後如果你決定要ClassB的,你只需要更改聲明的RHS。

我想如果你通過一個集合枚舉,你也可以只是'var',然後找出類型。

是嗎?我的軟弱的頭腦沒有看到其他的巨大好處嗎?

+0

當我說「我想,如果你是通過收集,你也可以只爲‘無功’,然後找出類型後枚舉。」我知道它已經在運行時輸入了......我的意思是在你的邏輯中。 – Matt 2009-07-27 23:11:44

+0

[在C#中使用var關鍵字]可能的重複(http://stackoverflow.com/questions/41479/use-of-var-keyword-in-c-sharp) – nawfal 2014-07-15 14:04:58

回答

8

它主要是合成糖。這真的是你的偏好。除非使用匿名類型,否則使用var是必需的。儘管如此,我更喜歡隱式打字,但它真的與LINQ一起閃耀。

我發現它是多餘的鍵入一個類型兩次。

List<string> Foo = new List<string>(); 

當我可以很容易地輸入var時,它很明顯是什麼類型。

var Foo = new List<string>(); 
4

我開始什麼原來是一個非常有爭議的線程,當我第一次簽署了這裏(我的選擇。「邪惡」來形容一般使用VAR顯然是一個糟糕的選擇。)不用說,我有對於VAR更欣賞比我之前,我開始線程,以及更好地瞭解它如何能夠有效地用於:

The evilness of 'var' in C#?

一些很好的理由使用VAR:

  • 簡潔
  • 重複(DRY)
  • 減少重構工作的減少
  • 支持匿名類型(它被添加到C#的關鍵原因)
0

首要原因隱式類型是支持匿名類型,如那些由LINQ查詢產生的。在處理複雜類型的泛型時它們也可以是一個很大的好處,比如Dictionary<int,List<string>>。這不是太複雜,但想象一下......

foreach KeyValuePair<int,List<string>> pair in myDictionary 
{ 

} 

被隱式鍵入簡化。

2

它允許我不必重複自己。考慮這個:

Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>(); 

我們有一個非常長的typename在同一行上重複兩次,絕對沒有任何好處。而且,如果你需要重構這個,你需要兩次更新類型。而這僅僅是因爲表現:

var dict = new Dictionary<string, List<int>>(); 

目前仍然沒有關於類型的dict此疑問,但代碼更短,我會聲稱,它更易於閱讀爲好。

5

var對匿名類型非常有用,它們沒有名稱供您使用。

var point = new {X = 10, Y = 10}; 

這將創建一個具有屬性X和Y的匿名類型。它主要用於支持LINQ。假設你有:

class Person 
{ 
    public String Name {get; set;} 
    public Int32 Age {get; set;} 
    public String Address {get; set;} 
    // Many other fields 
} 

List<Person> people; // Some list of people 

現在假設我想選擇只有等到年齡的姓名和多年的人誰是18歲以下的18:

var minors = from person in people where person.Age < 18 select new {Name = person.Name, YearsLeft = 18 - person.Age}; 

現在minors包含一些一個List匿名類型。我們可以迭代這些人:

foreach (var minor in minors) 
{ 
    Console.WriteLine("{0} is {1} years away from age 18!", minor.Name, minor.YearsLeft); 
} 

這些都不是可能的;我們需要選擇整個Person對象,然後在我們的循環中計算YearsLeft,這不是我們想要的。

0

雖然var關鍵字主要是推出了支持匿名類型,我已經看到了更廣泛的使用它的主要論點是爲了簡潔/更可讀的代碼,再加上你的代碼行更貼:

Dictionary<string, double> data = new Dictionary<string, double>(); 
versus 
var data = new Dictionary<string, double>(); 

雖然對大多數人來說,我也很喜歡var關鍵字作爲一個盲人程序員,因爲我聽的代碼被只有一個syllabul :-)

1

其實讀出後沒有一個很好的理由,因此這裏的變量名「 var「在C#中用於處理匿名類型。

像:

var t = new {number = 10, name = "test"};