循环不枚举新添加的数组元素

时间:2015-08-06 09:54:54

标签: arrays vb.net loops enumeration

这是我的问题: 我有一个句子,我使用Message.Text.Split(" ")将其拆分以得到一个单词数组,但是有些单词可能会被'而不是空格分隔(例如all'una)。 如果发生这种情况,则数组元素将为all'una,而不必分离元素alluna。所以我为获得结果所做的是:

'loop start (tried for, for each and  while using words.GetEnumerator())
   'do stuff here
   If word.Contains("'") Then
      Dim apos() As String = word.Split("'")
      For Each subword As String In apos
          words.Add(it)
      Next
   End If
   'do other stuff here
'loop end

问题是单词数组(或列表)正确地改变了它的大小,但循环忽略了新元素。 我查看了互联网并阅读了这篇文章:

  

修改集合。 GetEnumerator返回的枚举器对象通常不允许您通过添加,删除,替换或重新排序任何元素来更改集合。如果在启动For Each ... Next循环后更改集合,则枚举器对象将变为无效,并且下次尝试访问元素会导致InvalidOperationException异常。   但是,这种修改阻塞不是由Visual Basic决定的,而是由IEnumerable接口的实现决定的。可以以允许在迭代期间进行修改的方式实现IEnumerable。如果您正在考虑进行此类动态修改,请确保您了解正在使用的集合上IEnumerable实现的特征。

这是我唯一的解决方案吗?

2 个答案:

答案 0 :(得分:2)

String.Split接受一系列令牌字符。

Message.Text.Split({" "c, "'"c})

答案 1 :(得分:0)

您不仅要添加新单词,还要删除原始单词。否则,您将在集合中同时拥有all'unaalluna

您可以为结果使用不同的集合,并将未更改的项目或拆分项目的结果复制到其中:

Dim result As New List(Of String)
For Each word As String in words
  If word.Contains("'")
    result.AddRange(word.Split("'"C))
  Else
    result.Add(word)
  End If
Next