奇怪的结果与词典字典,为什么?

时间:2014-02-26 20:13:51

标签: vb.net dictionary

我需要一个模块中的字典字典,但由于某种原因它不会产生我期待的结果。我已经编写了一个示例来说明问题,如下所示。

 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,会发生什么。

我显然做了一些愚蠢的事情,或者我没有理解字典中词典的基本原则。无论哪种方式,如果有人能解释为什么我看到我所看到的东西,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果您阅读了MSDN doc

  

如果未找到密钥,则value参数将获取TValue类型的相应默认值; 例如,0(零)表示整数类型,false表示布尔类型,null表示引用类型。

十进制的默认值为0

您需要另一个变量作为trygetvalue

的第二个参数