遇到问题我正在尝试将Insert()
数据放入列表Of String
但由于某种原因它没有插入数据。
Private Sub Build(param 1, param 2, param 3,)
Dim dataList As New List(Of String)
Dim charcode as String = ""
Dim index As Integer = 0
For i As Integer = 0 To rowCount - 1
dataList.Add("data" & i)
Next
'dataNum is of int value (zero based) from 0 - whatever number
For Each Item As String In root.Subfields
charcode = GetChar(Item, 2)
If Not charCodes.Contains(charcode) Then
dataList(dataNum).Insert(index, Item)
index += 1
End If
Next
End Sub
使用Visual Studio调试器,我可以看到正在填充dataList
但是当我们到达For Each
时,数据没有被填充到相应集合(data1,data2)下的列表中
这里发生了什么?当然这应该有效(对吧?)。
谢谢。编辑:
这是我想要完成的图像:
你可以看到我有一个主要的集合,里面有集合或子字段。
答案 0 :(得分:2)
从问题文本中可以看出,您试图在列表中插入一个全新的字符串作为新条目。仔细看看这一行:
dataList(dataNum).Insert(index, Item)
执行此代码时,它首先检索List(Of String)
变量引用的dataList
对象,然后在索引{{1}处查找特定字符串对象 }。现在你有一个字符串(不再一个List),你调用字符串的 dataNum
方法。这不是列表的Insert()
方法。
要解决此问题,我需要了解更多有关您如何使用代码或问题文本中未提及或声明的Insert()
变量的信息。目前尚不清楚您希望如何使用它。
或许你真的只想要一个字符串。如果是这样,那不你的问题文本要求的是什么。但是,如果您真的想在该特定字符串中插入其他文本,则仍然存在问题。 .Net 中的字符串对象不会更改(我们说它们是“不可变的”)。当您使用index
之类的方法时,它会生成并返回新的字符串对象,而不是更改该字符串实例。考虑到这一点,您需要在某处分配新字符串。这看起来像这样:
Insert()
但是,再次,这不是你的问题的文本所要求的。我在这里包含它因为它更符合代码示例。
答案 1 :(得分:2)
字符串是不可变的。如果在字符串上调用Insert,则需要捕获返回更改的insert的返回值。原始字符串不会更改。顺便说一下,你是否意识到你正在插入字符串而不是列表?
如果你想在当前列表中插入一个字符串,你需要这样的东西(如果你需要使用变量 datanum 或变量,从上面的代码中不是很清楚index 选择列表中的适当位置)
For Each Item As String In root.Subfields
charcode = GetChar(Item, 2)
If Not charCodes.Contains(charcode) Then
dataList.Insert(index, Item)
index += 1
End If
Next
从下面的评论中,您似乎只想用新值替换列表中的元素。在这种情况下,您可以将列表视为数组,并编写类似
的内容dataList(0) = newItem;