【问题标题】:Array replacing not working阵列替换不起作用
【发布时间】:2014-12-22 13:36:40
【问题描述】:

我有一个这样的数组列表:

Dim valori As New List(Of String)

我将替换数组的最后一个单元格,所以我编写了以下代码:

For x As Integer = 0 To valori.Count - 1
                        If valori.Count <> 0 Then
                            item = valori(x).Split(",")
                            Dim prop = item(4)
                            Dim decimalVal = System.Convert.ToDecimal(prop)
                            If prop <> 0 Then
                                valori(x).Replace(prop, "14") 'should update the array content
                                MessageBox.Show(valori(x))
                            End If
                        End If
                    Next x

怎么看,我的数组是以String为特征的,所以我在第一次拆分数组时,得到了最后一个单元格(4)。我将此单元格保存在 decimalVal 变量中,然后将此值转换为十进制。 此时我将decimalVal的值与0(递归函数)进行比较。 我发现自己在一个带有“x”索引的 for 循环中,所以我登录到 valori(x) 索引,然后用 14 替换道具值,我输入 14 来尝试,但我会简单地减少值...... 貌似不是替换成功,数组不变,怎么回事?

【问题讨论】:

  • If valori.Count &lt;&gt; 0 Then 是多余的 - 此条件始终为 True。如果valori.Count = 0 将永远不会执行循环。 valori的内容是什么?你的代码会产生什么?你期待什么?
  • valori(x).Replace(prop, "14") 这也是错误的。字符串是不可变的(不能更改);必须使用新内容创建一个新内容。 valori(x) = valori(x).Replace(prop, "14")valori 也不是数组或数组列表。它是一个列表或更一般地,一个集合
  • valori.count 包含数组的元素。我希望数组的每个元素都被拆分,并且第四个单元格减少状态数,我通过将 15 替换为 14 来做到这一点,依此类推,但这不会发生。
  • valori(x) = valori(x).Replace(prop, System.Threading.Interlocked.Decrement(prop)) 给我这个错误信息:AmbiguosMatchException

标签: .net arrays vb.net string generic-list


【解决方案1】:

Strings are immutable 表示在字符串上调用Replace 不会更新相关字符串,它会返回一个新字符串。所以这一行:

valori(x).Replace(prop, "14")

不会替换字符串,因为它返回替换后的字符串。您需要将其分配回原始字符串:

valori(x) = valori(x).Replace(prop, "14")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2018-04-27
    • 2018-03-15
    • 2015-02-21
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多