我有这个结构:
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
出于某种原因,这不起作用......
错误代码是:表达式是一个值,因此不能作为赋值的目标。
如何改变字典中现有的值???
亲切的问候!谢谢。
答案 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
,则可以使用您拥有的代码。我建议应该是一个类而不是一个结构,因为你在创建后修改了值