C#中匿名类型的性能表现

13

C#中使用匿名类型是否不好?


1
请参阅C#中应如何使用匿名类型? - Matthew Flaschen
5个回答

24

不是。它们是在编译时生成的代码类,并且与普通类一样有效。


14

它们在性能方面与其他类型相同。

编辑

更清楚地说,我应该说它们的表现完全像其他类型,因为它们与其他类型完全相同,只是编译器生成名称不同。唯一会影响性能的方式是如果将匿名类型实例传递到另一个作用域,在那里需要使用反射或dynamic才能访问属性。这会很昂贵,因为它涉及到晚期绑定以在运行时解析所有内容。


12

匿名类型本身是否不好? 不是。如果是的话,C#团队肯定不会浪费时间将其添加到语言中。在底层,它们只是编译成标准的CLR类型。

像几乎所有其他语言功能一样,匿名类型是否可以被滥用到非常低效的程度?当然可以。


8
在C#中,匿名类型仍然是静态类型,访问它的方法和属性是由编译器解析的。其性能与显式类型相当。

6
在CLI中不存在匿名类型。实际上,C#中的匿名类型只是一种虚构:它们就像任何其他命名类型一样,因为这是CLI支持的唯一类型。唯一的区别是它们的名称由随机数生成器生成,而不是由人类生成。因此,匿名类型的性能与命名类型完全相同,因为匿名类型本质上就是命名类型。 - Jörg W Mittag
1
@Jörg:谢谢您在这里说得那么清楚。如果您不介意,我要借鉴一下您的答案。 - Steven Sudit
匿名类型没有方法;-) - greenoldman
@macias:那么你叫默认构造函数什么名字呢? :-) - Steven Sudit
@macias:是的,我也称之为构造函数,因为这是一个准确的描述。根据http://msdn.microsoft.com/en-us/library/ms173115.aspx,构造函数是方法,因此称其为方法也是准确的。 - Steven Sudit

6

这不错,有时很方便。例如,在使用 Linq 时,与其创建只使用一次的类,不如使用匿名类型更为可取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接