似乎没有办法将匿名类型派生自对象。但是我还是想问一下,因为我们在简单的查询表达式中经常使用匿名类型来提取数据子集以用于创建这些匿名类型。对我来说,它们应该是结构体(值类型),以实现更大的内存效率而不是引用类型。
有什么想法?
似乎没有办法将匿名类型派生自对象。但是我还是想问一下,因为我们在简单的查询表达式中经常使用匿名类型来提取数据子集以用于创建这些匿名类型。对我来说,它们应该是结构体(值类型),以实现更大的内存效率而不是引用类型。
有什么想法?
目前没有受支持的C#语法可生成匿名结构体。
更新:C# 7现在有值类型元组,可以像引用类型匿名类型一样在相同的上下文中使用。
有人普遍认为值类型比引用类型“更有效率”。这完全是个神话;它们在某些操作上更有效率,在其他操作上则不如引用类型。
例如,如果你所关心的工作单元是“将值复制到新位置”,那么大型值类型与引用类型相比就不那么有效率。引用类型会复制一个指针大小的引用,而不管所引用数据的大小,并因此在单个高度优化的机器指令中进行复制。值类型每次都要复制数据的大小,可能非常大,并且需要多条指令。
不过,匿名类型只是一种方便的功能。如果你不喜欢它们的性能特点,你可以定义自己的结构体。
你是否分析过你的应用程序,并发现匿名类型是其中最慢的部分?如果是这样,我建议你手动创建所需的结构体并重新测试,以查看是否解决了问题。否则,我建议你将更多的时间放在关注手头的业务问题上,而不是花费时间打字(就像该功能允许的那样)。