2013-04-24 49 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