未插入数据的字符串列表

时间:2017-06-08 20:45:08

标签: .net string vb.net list

遇到问题我正在尝试将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 enter image description here

但是当我们到达For Each时,数据没有被填充到相应集合(data1,data2)下的列表中

enter image description here

这里发生了什么?当然这应该有效(对吧?)。

谢谢。

编辑:

这是我想要完成的图像:

enter image description here

你可以看到我有一个主要的集合,里面有集合或子字段。

2 个答案:

答案 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;