gpt4 book ai didi

class - VBA:字典内存问题?填充 dict、.removeall、填充问题

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

所以我在这里使用了一些代码,我使用一个字典来填充两个不同的字典,这些字典作为自定义类中的属性保存。我这样做是为了提高效率。

注意:我通过为要设置的每个属性使用字典来解决此问题,但这并不太有效。

所以大致这是我的代码:

for iKey = 1 to class.maxnumber ' 8
dTempDict.add iKey, cdbl(24) ' enforce to 24 for calcs later
next iKey

Set class.dict1 = dTempDict ' commit to class.dict1

dTempDict.removeall 'wipe temp dictionary

for iKey = 1 to class.maxnumber ' 8
dTempDict.add iKey, "word" ' something other than 24 to test
next iKey

Set class.dict2 = dTempDict

所以上面的工作正常。然后我尝试循环并打印 class.dict1 的键没有问题。然后,当我尝试将值分配给预先声明的 dbl 时,我遇到了麻烦。然后我在不同的子传递类byref中循环遍历每个键:
dim dTempDict as scripting.dictionary
Set dTempDict = class.dict1
for each iKey in dTempDict
msgbox typename(dTempDict.Item(iKey))
next iKey

这带来了结果......“字符串”......令人困惑。然后我将我的值持有者更改为一个字符串并且它起作用了。我已经检查了类中的访问器,并且它们没有循环回错误的字典属性,因此看起来即使我将它们分配到第二个甚至执行了 .removeall,我的第二个字典的值也会填充到第一个字典中。

有任何想法吗?

如上所述,对 class.dict1 和 class.dict2 使用不同的临时字典,它们被正确分配,但这仍然令人困惑。

最佳答案

当你这样做...

Set class.dict1 = dTempDict 
dTempDict.removeall
'...
Set class.dict2 = dTempDict

... 然后两个 dict1dict2指向同一个 Dictionary 对象( dTempDict)。

将一个对象变量分配给另一个对象变量不会创建该对象的副本,而只会导致指向同一对象的附加“指针”。

您应该创建一个新的字典而不是重复使用相同的字典来分配给 dict2 .

关于class - VBA:字典内存问题?填充 dict、.removeall、填充问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15141872/

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