对不起标题我没有看到更好的问题。
在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
由于
答案 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"}))
所以没有临时变量(至少没有在代码中看到;-))