如何在vb.net中填充类的Dictionary列表

时间:2015-11-27 14:54:30

标签: vb.net list dictionary

对不起标题我没有看到更好的问题。

在VB.NET中我有一个字典(key,list(of))在字典中添加元素我创建了一个临时列表并将列表添加到字典中。当我完成添加它我清除列表。但这样做也清除了我添加到字典中的价值。 我无法弄清楚原因

这是我的代码:

Public Class MesuresVar


Private _Moyenne_Comp As Single



Public Shared DicOfControl As New Dictionary(Of String, List(Of CtrlItem))  
Public Event VariableChanged(ByVal Val As Object, UpdateCtrl As String)


Public Sub New()
    Dim Tmp_List As New List(Of CtrlItem)
    Dim f As New frmAcc
    Tmp_List.Add(New CtrlItem With {.Ctrl = f.L_Moy_G, .prop = "Text"})
    Tmp_List.Add(New CtrlItem With {.Ctrl = f.GaugeSACCG, .prop = "Mesure"})
    DicOfControl.Add("_Moyenne_Comp", Tmp_List)
    Tmp_List.Clear()

End Sub

Public Property Moyenne_Comp As Single
    Get
        Return _Moyenne_Comp
    End Get
    Set(value As Single)
        _Moyenne_Comp = value

        RaiseEvent VariableChanged(_Moyenne_Comp.ToString, "_Moyenne_Comp")
    End Set
End Property
End Class

由于

3 个答案:

答案 0 :(得分:1)

将Tmp_List添加到字典时,您不会添加列表的副本。您正在添加对列表的引用。您清除的临时列表与字典中的临时列表相同。

无需清除列表。只需在构造函数结束时让Tmp_List变量超出范围。

答案 1 :(得分:1)

您添加的列表与您清除的列表相同。不要清除它。

Public Sub New()
    Dim Tmp_List As New List(Of CtrlItem)
    Dim f As New frmAcc
    Tmp_List.Add(New CtrlItem With {.Ctrl = f.L_Moy_G, .prop = "Text"})
    Tmp_List.Add(New CtrlItem With {.Ctrl = f.GaugeSACCG, .prop = "Mesure"})
    DicOfControl.Add("_Moyenne_Comp", Tmp_List)
End Sub

此代码也会做同样的事情,可能会帮助您了解正在发生的事情。

Public Sub New()
    Dim Tmp_List As New List(Of CtrlItem)
    Dim f As New frmAcc
    DicOfControl.Add("_Moyenne_Comp", Tmp_List)
    Tmp_List.Add(New CtrlItem With {.Ctrl = f.L_Moy_G, .prop = "Text"})
    Tmp_List.Add(New CtrlItem With {.Ctrl = f.GaugeSACCG, .prop = "Mesure"})
End Sub

答案 2 :(得分:0)

确定, 谢谢大家。

我重写了一点我的代码,与你告诉我的内容以及我发现的东西混合起来......

这里是:

       DicOfControl.Add("_Moyenne_Comp", New List(Of CtrlItem))

    DicOfControl("_Moyenne_Comp").Add((New CtrlItem With {.Ctrl = frmAcc.L_Moy_G, .prop = "Text"}))
    DicOfControl("_Moyenne_Comp").Add((New CtrlItem With {.Ctrl = frmAcc.GaugeSACCG, .prop = "Mesure"}))

所以没有临时变量(至少没有在代码中看到;-))