我需要一个模块中的字典字典,但由于某种原因它不会产生我期待的结果。我已经编写了一个示例来说明问题,如下所示。
Dim mydict As New Dictionary(Of Int32, Dictionary(Of Int32, Decimal))
Dim outerkey As Integer = 2
Dim innerkey As Integer = 7
Dim innerDictionary As Dictionary(Of Int32, Decimal) = Nothing
Dim innerkeyvalue As Decimal = CDec(12.3)
If Not mydict.TryGetValue(outerkey, innerDictionary) Then
' ' So we need to create one
innerDictionary = New Dictionary(Of Int32, Decimal)
mydict.Add(outerkey, innerDictionary)
End If
If Not innerDictionary.TryGetValue(innerkey, innerkeyvalue) Then
' So we need to create it
innerDictionary.Add(innerkey, innerkeyvalue)
Else
Dim retrievedvalue As Decimal = innerDictionary.Item(innerkey)
innerkeyvalue += retrievedvalue
innerDictionary.Add(innerkey, innerkeyvalue)
End If
如果我在'If Not innerDictionary.TryGetValue(innerkey,innerkeyvalue)上放置一个断点那么 'linekey的值为7,innerkeyvalue的值为12.3,这与我的预期完全一样。那些值还没有在内部字典中,所以我希望代码转到下一行(它会这样做)将这些值添加到内部字典中。
虽然内部键的值保持不变(7)但内部值的值从12.3变为0,会发生什么。
我显然做了一些愚蠢的事情,或者我没有理解字典中词典的基本原则。无论哪种方式,如果有人能解释为什么我看到我所看到的东西,我将不胜感激。
答案 0 :(得分:1)
如果您阅读了MSDN doc
如果未找到密钥,则value参数将获取TValue类型的相应默认值; 例如,0(零)表示整数类型,false表示布尔类型,null表示引用类型。
十进制的默认值为0
您需要另一个变量作为trygetvalue