匿名类型是否较慢?

时间:2010-12-30 20:30:06

标签: c# .net vb.net

  

可能重复:
  Performance of anonymous types in C#

匿名类型是否比声明类型慢?

例如,

Dim score as Double = CalculateScore()

Dim score = CalculateScore()

为什么使用显式打字,如果它不慢?

5 个答案:

答案 0 :(得分:4)

隐式类型变量是"句法糖"。它以任何一种方式编译成完全相同的代码,因此运行时性能不受影响。

为什么要使用明确的声明?

这是开发者或组织的风格/偏好/标准问题。有些人发现代码更清晰或有意透露。

对于记录,匿名类型(通知中没有double-n)是一个内联声明的,或者#34; on-the-fly,"取决于你如何看待它。这是匿名的,因为它没有名字。它是一个临时对象,可用于保存相关数据。

在VB中,通过调用Dim anon = New With { .Name = "Moderator71", .Id = 19 }来声明它 您可以选择将某些属性声明为Key

答案 1 :(得分:1)

不,匿名或推断类型的速度没有差异。

但也许你在谈论动态类型,它们会慢一些。

您的(第二个)代码示例建议使用推断类型,这意味着score将在编译时确定为double

答案 2 :(得分:1)

  

为什么要使用显式输入?

可读性可能是一个。

答案 3 :(得分:1)

假设CalculateScore函数返回double。

不,这是相反的方式。将其声明为Double将始终尽可能快。当Option Infer On生效时,省略声明的速度会很快。如果不是那么它将是Object类型的变量。双重装箱。

在VB.NET中,拆箱非常昂贵,因为它允许拆箱到任何兼容类型,而不仅仅是Double。与C#不同,如果存在不匹配,则抛出异常。

答案 4 :(得分:0)

使用显式键入vs impred的原因是因为它将大量错误从运行时移动到编译时。由于IDE,我可以在几秒钟内修复编译时错误。如果在运行时发生错误,那么在某人运行该特定代码行之前可能需要几个月甚至几年,或者用户可能每天都会遇到它,但它可能需要很长时间才能回到我身边并且我可以修复它。我叫那些定时炸弹。你不知道他们何时何地会离开。

我的第一个目标是编写不会爆炸的代码,因此编译时错误非常棒。