gpt4 book ai didi

vb.net - For Each 循环枚举器表达式和内存消耗

转载 作者:行者123 更新时间:2023-12-04 06:17:17 25 4
gpt4 key购买 nike

根据语言规范guide对于 VB.NET 第 10.9.3 节

The enumerator expression in a for each loop is copied over into memory.



如果我有一个包含 10000 个对象的列表,该列表将在内存中两次用于下面的代码?
dim myList as new list(of bobs)
'put 10000 bobs in my list
for each x In myList
'do something
next

如果我从 linqQuery 或其他一些此类查询生成列表,那么在 for each 循环语句中生成该列表是有意义的,例如,不会在内存中两次列出该列表。
for each x in myList.where(function(x) x.name = Y)
'do something
next

如果 LINQ 查询在 for each 循环上不可读,我是否放弃可读性并将其放在 for each 循环声明行上?

我应该在自己的变量中声明列表,然后硬着头皮让列表在内存中存在两次吗?

最佳答案

that list will be in memory twice for the code below



不,不会。在您的情况下,规范在这里讨论的是变量“x”——而不是整个集合。请记住,枚举器(任何 IEnumerable<T> 或类似的)甚至不一定在内存中有项目。例如,当通过 C# 中的迭代器创建时,您可以在枚举它们时生成“集合”。即使语言想要这样做,也没有可以复制的对象“列表”(必须)。

Is the linq query is unreadable on the for each loop



在很多情况下,我更喜欢这种过滤方式。如果你想让它更清楚,你也可以很容易地将它移到循环之外:
Dim filteredCollection = myList.Where(Function(x) x.name = Y)
For Each x in filteredCollection

如果您发现它更具可读性,这样做没有任何缺点。

关于vb.net - For Each 循环枚举器表达式和内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068140/

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