在Visual Basic 2012中使用结构更改字典条目

时间:2014-01-14 09:04:59

标签: vb.net visual-studio-2012 dictionary

我有这个结构:

Public Structure SourceDB
    Public SourceDBid As Integer
    Public SourceDBWimLocationName As String
    Public SourceDBDBName As String
    Public SourceDBIPAdress As String
    Public SourceDBPort As String
    Public SourceDBUsername As String
    Public SourceDBPassword As String
    Public ConnectivityState As String
    Public LastTransmittedId As Integer
End Structure

我按以下方式声明字典:

Private MySourceDBDictionary As New Dictionary(Of Integer, SourceDB)

现在值已添加到词典中......

在某些时候,我想在每个循环中更改字典的值:

For Each element As KeyValuePair(Of Integer, SourceDB) In MySourceDBDictionary
    MySourceDBDictionary.Item(element.Key).LastTransmittedId = 0
Next

出于某种原因,这不起作用......

错误代码是:表达式是一个值,因此不能作为赋值的目标。

如何改变字典中现有的值???

亲切的问候!谢谢。

2 个答案:

答案 0 :(得分:2)

问题出在结构中,请看一下这个问题Expression Is a value and therefore cannot be the target of an assignment

上述问题应该是您应该何时使用Structure

的一个很好的解释

将您的结构更改为Class,您的代码应该有效, 你也可以改变你的foreach循环到这样的东西:

    For Each element As KeyValuePair(Of Integer, SourceDB) In MySourceDBDictionary
        element.Value.LastTransmittedId = 0
    Next

答案 1 :(得分:1)

您想要做的事情不能使用值类型,但您可以通过阅读结构并将其传回来做您想做的事。

    For Each element As KeyValuePair(Of Integer, SourceDB) In MySourceDBDictionary
        Dim src = MySourceDBDictionary(element.Key)
        src.LastTransmittedId = 0
        MySourceDBDictionary(element.Key) = src
    Next

这将使用新的“值”

替换整个值类型

或者,如果您使用Reference Type而不是Value Type,即使用Class而不是Structure,则可以使用您拥有的代码。我建议应该是一个类而不是一个结构,因为你在创建后修改了值