VBScript字典存在方法始终返回True

时间:2012-05-07 01:18:14

标签: dictionary vbscript exists

我做错了什么?从我的测试来看,objDic.exists永远不会给出错误!

    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 -- ""

5 个答案:

答案 0 :(得分:12)

尽我所知,只需引用一个字典对象密钥就好像它确实存在一样。

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

答案 1 :(得分:0)

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

-M

答案 2 :(得分:0)

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

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

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

因此,if函数的值未添加到字典中,但已添加。

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

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

如果密钥不存在,则默认情况下会创建密钥。字典意味着添加条目(如果它们不存在),因此下面将始终返回true。

If objDic.exists("test") then

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

If objDic.item("test") <> "" then