在Dictionary中存储对象的问题

时间:2013-07-12 19:42:42

标签: vb.net dictionary

以下是我的代码的示例输出,一个简单的聊天程序:

John says: Hello there!
Marsha says: Hi there!
John says:  First sentence.
Marsha says:  Second Sentence.

在文本框控件中,它显示如上。但是,在用于存储会话的字典中,它将如下所示:

John says: First sentence.
Marsha says: Hi there!
John says: First sentence.
Marsha says: Second sentence.

我已经多次查看了我的代码...对于我的生活,我无法确切地说出我可能在哪里出错。

我已将问题跟踪到sendmsgbutton方法,如下所示:

Private Sub sendMsgButton_Click(sender As System.Object, e As System.EventArgs) Handles sendMsgButton.Click
    If rtnConnectStatus(t) = False Then
        RaiseEvent statusCheck("Not Connected" + ControlChars.CrLf)
    Else
        Dim completeMsg As String
        msg.Name = nameText.Text
        msg.Message = msgTxt.Text
        completeMsg = msg.ToString
        msgRecorded.Text &= completeMsg
        RaiseEvent statusCheck("Message Sent." + ControlChars.CrLf)
        msgList.Add(msgListIndex, msg)
        'RaiseEvent debugBox(msg, msgListIndex)
        msgListIndex += 1
        RaiseEvent DataSend(completeMsg)
        msgTxt.Clear()
    End If
End Sub

这是msgList继承的字典类:

Public Class MsgDictionary
     Inherits DictionaryBase

Public Property Item(ByVal key As Integer) As MsgObj
    Get
        Return CType(Dictionary(key), MsgObj)
    End Get
    Set(ByVal m As MsgObj)
        Dictionary(key) = m
    End Set
End Property

Public Sub Add(ByVal index As Integer, ByVal m As MsgObj)
    Dictionary.Add(index, m)
End Sub

End Class 

我的下一个测试是查看它是否仅 消息值,或者名称值是否也受此影响。

提前感谢您提供有关此方面的任何帮助/建议。

编辑:只是为了澄清,每个字典条目的名称和字符串部分作为单个字典对象的属性。

1 个答案:

答案 0 :(得分:2)

问题很明显:当现实需要一个不同的东西时,你正在考虑一个字典逐个执行关联。您的代码将“John说:”与“Hello there!”相关联。然后到“第一句话”。 (你最终看到的值)。你要做的就是将“约翰说:”与一系列行动联系起来。

如果你想依赖字典,你应该重新定义它,以便它可以将每个键与一个值列表相关联,即:

Dim newDic = New Dictionary(Of String, List(Of String))

然后您可以使用正确的信息填充它。例如:

Dim msgList As New List(Of String)
msgList.Add("Hello there!")
msgList.Add("First sentence.")
newDic.Add("John says:", msgList)

逻辑上,您必须根据实际需要调整此代码(即重新定义自定义词典和数据类型)。