找不到哈希表键,特殊字符(例如" @")处理,转义

时间:2014-05-18 11:22:11

标签: vb.net escaping key hashtable

我在 VB.NET 中有一个 HashTable ,并使用纯ASCII字符串的键动态添加记录,但有时会包含特殊字符,如"的 @ "我有一堆钥匙以" @ "开头。添加 HashTable

是没有问题的
Public Class MyHash
    Inherits Collections.Hashtable

    Sub New()

       'Data coming from DB
        me.Add(key, value)

       'for example:
       '  me.add("@key", "value")
    End Sub

End Class

工作正常....在调试器中查看对象会显示带有键的项目" @key "作为 HashTable 集合的元素。然而...

MyHash("@key")

退货" 没什么"还

MyHash.ContainsKey("@key")

返回" 错误"。

我不想用其他东西替换特殊字符,因为这些字符是关键所在......其他任何东西都会有所不同,并在未来创建一系列全新的问题。

在添加 HashTable 或查找期间,是否可以转义Key 值,或者可以为我继承的类设置的配置标志,例如一个编译器属性或什么使它工作并找到任何键的所有记录?

由于

1 个答案:

答案 0 :(得分:2)

我在一个新的控制台项目中编写了以下代码:

Module Module1
Public Class MyHash
    Inherits Collections.Hashtable

    Sub New()

        'Data coming from DB
        Me.Add("@key", "value")
    End Sub

End Class


Sub Main()
    Dim h As New MyHash
    Debug.Assert(h.ContainsKey("@key"))
    Debug.Assert(h("@key") = "value")
End Sub
End Module

一切按预期工作(即使在观察窗口)。 “@”符号不需要任何转义。

可以肯定的是,因为theese数据来自db,所以密钥恰好是“@key”(例如,结尾处的空格)。读完键和值对后,我建议您查看:

Debug.Assert(key.Trim.Equals("@key"))
Debug.Assert(key.Equals("@key"))

如果第一个断言为真且第二个断言失败,那么您知道在字符串的开头和/或末尾有一些空格。