gpt4 book ai didi

.net - 为什么 .NET 中的匿名类型被实现为引用类型?

转载 作者:行者123 更新时间:2023-12-03 04:16:01 26 4
gpt4 key购买 nike

因为匿名类型无论如何都是只读的,所以如果将它们实现为结构,那么 linq 查询就不需要创建大量临时对象,效率会更高:

// This doesn't make any sense, it is just for demonstration
var result = thingies
.Select(x=> new {A = 1, B = 2, C = 3});

顺便说一句。当reading this时我有了这个想法

编辑:

最棒的是,编译器会根据变量的大小和用法(如果必须传递给许多方法)来决定是否使用值类型或引用类型。

但是我在msdn中找到的以下这句话会导致问题吗:

If two or more anonymous types in the same assembly have the same number and type of properties, in the same order, the compiler treats them as the same type.

由于匿名对象(及其关联类型)不能离开它定义的方法,所以我们在这里没有问题,不是吗?

最佳答案

完整的 .NET 垃圾收集器针对两种情况进行了特别优化:持续大量时间的大型、长期存在的对象,以及快速消失的小型、短期对象。 Gen0 集合实际上是免费的,因为它们的速度有多快(事实上,速度如此之快且频繁,以至于许多分析器甚至懒得显示它们或其内容),因此没有理由避免在 Gen0 范围内消失的临时集合。创建它们的函数。

匿名类型几乎完美地适合第二种情况;它们并不意味着比创建它们的函数更长寿(尽管你可以通过一些技巧来做到这一点)。考虑到这个模型,考虑到大多数值类型的复制成本相对较高,并且考虑到许多 LINQ 查询涉及一长串函数,这些函数都需要另一个副本,对我来说,设计者选择制作这样的代码是有道理的。它们引用类型。

关于.net - 为什么 .NET 中的匿名类型被实现为引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7109101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com