8

我究竟做错了什么?根据我的测试,objDic.exists 永远不会给出 False!

    dim objDic

    set objDic = createobject("scripting.dictionary")

    objDic.add "test","I have not been deleted"

    wscript.echo objDic.item("test") 'Displays -- I have not been deleted

    objDic.remove "test"

    wscript.echo """" & objDic.item("test") & """" 'Displays -- ""

    if objDic.exists("test") then wscript.echo """" & objDic.item("test") & """" 'Displays -- ""
4

6 回答 6

13

据我所知,字典对象键是通过仅引用它来创建的,就好像它确实存在一样。

wscript.echo objDic.Item("test") 'Creates the key whether it exists or not
wscript.echo objDic.Exists("test") 'Will now return true

这里有更多代码,您可以尝试证明/测试我的理论。我通常使用 MsgBox 而不是 WScript.Echo,正如您将在我的代码中看到的那样。

dim objDic, brk
brk = vbcrlf & vbcrlf
set objDic = createobject("scripting.dictionary")
objDic.add "test","I have not been deleted"
wscript.echo "objDic.Exists(""test""): " & brk & objDic.item("test")
WScript.Echo "Now going to Remove the key named: test"
objDic.remove "test"
MsgBox "objDic.Exists(""test""): " & brk & objDic.Exists("test") 'Returns False
wscript.echo "objDic.item(""test""): " & brk & objDic.item("test") 'Shows Blank, Creates the key again with a blank value
wscript.echo "objDic.item(""NeverAdded""): " & brk & objDic.item("NeverAdded") 'Also shows blank, does not return an error
MsgBox "objDic.Exists(""test""): " & brk & objDic.Exists("test") 'Returns True
于 2012-05-07T02:23:03.507 回答
0

从 IDE 中删除所有与您的字典有关的监视变量。它是可重复的。您可以通过这种方式导致/修复该行为(Outlook 2010 VBA IDE)。我猜有点像观察者效应。. .

-M

于 2014-03-17T15:28:31.587 回答
0

这里有同样的问题......
在我的代码中,有一个动态的字典数组。
有些条目有键“HIGH”,有些没有。
测试每个条目的键是否存在总是返回 true:

for each dictionary_entry in dictionary_array
      if dictionary_entry.Exists("HIGH") then msgbox("Hey, I have a HIGH key, and its value is " + dictionary_entry("HIGH))
next

如果我观察变量,调试器会为每个 dictionary_entry 创建一个“HIGH”键。
必须从监视变量中删除dictionary_entrydictionary_array才能使代码正常工作。

于 2015-10-07T17:14:22.203 回答
0

这个问题给我带来了很多麻烦。

原来我在代码前面的键上运行了一个“If”函数,因此将它添加到字典中。

If dict(key) = "chocolate" then 
Check = dict.exists(key) 'Always resolves to true
End If
Whatis = dict(key) 'resolves to ""

所以 if 函数中的值没有添加到字典中,而是添加了

于 2018-06-04T22:44:52.370 回答
0

有同样的问题,删除IDE中所有监视的变量并修复它

于 2021-05-01T02:02:07.123 回答
-2

接受的答案没有回答我的问题。我想其他人,所以我发布我的解决方案,因为这个线程是谷歌的第一个结果。

如果密钥不存在,则默认创建密钥。字典旨在添加不存在的条目,因此以下将始终返回 true。

If objDic.exists("test") then

由于密钥是在您测试它是否存在时创建的,因此尚未定义该值。下面将测试 Key 是否没有与之关联的值。当然,如果您有空白值,这将不适用于您的字典。

If objDic.item("test") <> "" then
于 2013-01-18T20:33:49.793 回答