2013-04-24 52 views
1

如果我們使用C#LINQ to XML遍歷包含一個小(< 100KB)節點XDocument對象是一個更好的做法或更好的性能,明智的使用XElement或標準隱 「var」 型?的LINQ to XML類型聲明

畫報:

foreach (XElement el in node.Elements()) 
{ 
    ... 
} 

foreach (var el in node.Elements()) 
{ 
    ... 
} 
+1

您是否認真預計會對性能產生可衡量的影響?爲什麼? – svick 2013-04-24 08:54:50

回答

4

這不會改變任何東西。 var只是開發人員編寫較短代碼的簡短形式。編譯它時,你的情況會被修改回XElement

var是強類型!請不要理解var就像PHP中的一個類型自由變量。

一個例子:

PHP

$i = 3; 
$i = new MyObject(); 
//Everything is fine 

C#

var i = 3; 
i = new MyObject(); 
//compiler error! 

所以有

var i = 3; 

之間沒有差異
int i = 3; 

編譯var後,反正由int更換,所以會出現,而執行沒有更好的性能。

+0

感謝您的回覆!然而,我不同意「不改變任何事情」的陳述,因爲編譯器必須完成閱讀陳述右側的工作,以便恰當地定義左側的定義並向左側提供定義,只需輸入例如'IEnumerable query = from ...'。我同意(基於我的經驗)和[文檔](http://msdn.microsoft.com/en-us/library/bb384061.aspx)支持這樣一個事實,即您的示例中的'var'事實上由編譯器鍵入爲「int」。再次感謝! – 2013-04-24 08:08:48

1

性能沒有差別,因爲.NET中的類型推斷髮生在編譯時。編譯後所有變量都將被強制輸入。

此外,沒有規則使用var或變量聲明的類型名稱。這是個人喜好的問題。有些人喜歡看到他們使用的變量類型,有些人認爲類型聲明是重複的形式(不是foreach語句的情況,而是簡單的變量聲明)。

var當您使用匿名類型時(這就是爲什麼它被引入)的實際功率。您根本無法指定變量的類型名稱:

var people = from p in doc.Descendants("Person") 
      select new { p.Name, p.Id }; 

請考慮閱讀Implicitly Typed Local Variables文章。

+1

謝謝!但是我確實看到了這個鏈接,這就是讓我在論壇中提出這個問題的原因。我想我現在只是好奇多少時間(我可以忽略)花費在編譯右側以提供左側的「類型」定義時編譯器消化並推斷該類型(var )的聲明,而不是簡單地鍵入IEnumerable 而不是「var」。我完全同意並且[documentation](http://msdn.microsoft.com/zh-cn/library/bb384061.aspx)支持「var」修復匿名類型問題。再次感謝! – 2013-04-24 08:01:52

+0

@ id.ot我不知道爲什麼編譯時間對你很重要,但你爲什麼不嘗試測量它? – svick 2013-04-24 08:56:59

+0

簡單地說......我一直在努力的任務就是測試就業,所以我只是想盡我所能。我絕對可以測試/測量它,再次感謝。 – 2013-04-24 10:12:25