【问题标题】:vb.net dictionary of string,dictionary...after filling readout always emptyvb.net 字符串字典,字典...填充后读数始终为空
【发布时间】:2012-03-12 09:10:14
【问题描述】:

我需要对字段进行一些比较和改组,(我来自更多的 PHP 背景,并且使用数组完全不同,正如在此处阅读许多内容后建议的那样,我知道 VB.NET 使用 LIST 和 Dictionary 更容易。

我有一个字典(字符串,字典(字符串,字符串)),它填得很好,但是在我尝试读出来之后,它总是空的....

下面我填写一些内容。我正在谈论的 var matchwholename VALUES 部分内的 fillDictionary。 我填写了 fillDictionary 并将其添加到 matchesWholename 之后我清除它,因为它处于循环中,并且还会有更多。

Dim matchesTotal As New List(Of String)
        Dim fillDictionary As New Dictionary(Of String, String)
        Dim matchesWholename As New Dictionary(Of String, Dictionary(Of String, String))

        Try
            If ds.Tables("matchesWholename").Rows.Count > 0 Then
                For Each dr As DataRow In ds.Tables("matchesWholename").Rows

                    If Not matchesWholename.ContainsKey(CStr(dr("key"))) Then
                         fillDictionary.Add("programme", CStr(dr("programme")))
                        fillDictionary.Add("remark", CStr(dr("remark")))
                        fillDictionary.Add("key", CStr(dr("key")))
                        fillDictionary.Add("displayname", CStr(dr("prop_value")))
                        Console.WriteLine("count before insert {0}", fillDictionary.Count)
                        matchesWholename.Add(CStr(dr("sanction_key")), fillDictionary)
                    End If
                    If Not matchesTotal.Contains(CStr(dr("key"))) Then
                        matchesTotal.Add(CStr(dr("key")))
                    End If
                    fillDictionary.Clear()
                Next
            End If
        Catch ex As Exception
            Console.WriteLine("Err: {0}", ex.Message)
        End Try

当我稍后尝试像这样读出时,它什么也没有返回...... 我实际上是否将填充字典的副本发送到其中?还是我的 clear() 方法清除了其中的内容?

Dim pair As KeyValuePair(Of String, Dictionary(Of String, String))
        Dim subpair As KeyValuePair(Of String, String)
        For Each pair In matchesWholename
            ' Display Key and Value.
            For Each subpair In pair.Value
                Console.WriteLine("{0}, {1}, {2}", pair.Key, subpair.Key, subpair.Value)
            Next

        Next

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    fillDictionary.Clear() 看起来有些可疑。您实际上是在每次迭代 For 循环时清除字典。

    【讨论】:

    • 是的,因为在将其放入 matchWholename 字典后,我会重复使用它,但不想要旧结果。
    • @reevdkooi,你有没有调试过这个,看看是否有任何东西被添加到matchesWholename字典中?
    • 实际上你可能是对的,我看到当我不这样做时它会被填满,但不正确......我认为添加会烘焙它的副本,而不是放置实际参考其中
    • @reevdkooi,是的,您每次都在添加对同一个 fillDictionary 的引用,这不是在创建副本。
    • @reevdkooi, matchesWholename.Add(CStr(dr("sanction_key")), New Dictionary(Of String, String)(fillDictionary))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多