string - 覆盖 Sub 中的 List(of String) 元素
问题描述
下面的例子被简化了。在我的项目中,我有一个很大的List(of String)
地方,我必须对字符串进行一些操作。为此,我创建了一个Sub
我进行操作的地方,它应该重写List(of String)
.
Module Module1
Sub Main()
Dim myList As List(Of String) = New List(Of String)
myList.Add("1Tom")
myList.Add("2Lisa")
'Now I want apply a function to the List. As an example I created one that removes the first Letteer
RemoveFirstChar(myList)
For Each str As String In myList
Console.Write(str)
Next
Console.Read()
End Sub
Sub RemoveFirstChar(ByRef myList As List(Of String))
For Each str As String In myList
str = str.Substring(2)
Next
End Sub
End Module
Sub 中的字符串操作本身有效,但未写入初始 List-Object。我实际上认为 usingByRef
会做到这一点。是否可以这样做,我只是有一个错误,或者我必须List(of String)
使用函数创建一个新对象并覆盖初始对象。像:
myList = foo(myList)
如果两者都可以,那么什么更有效?因为我必须在只有几十万个元素的 List(of Strings) 上执行此操作。
解决方案
你必须使用For
-loop,你不能用 a 修改字符串For Each
:
Sub RemoveFirstChar(ByRef myList As List(Of String))
For i As Integer = 0 To myList.Count - 1
Dim str As String = myList(i)
myList(i) = str.Substring(2)
Next
End Sub
您可以修改For Each
对象,但由于字符串是不可变的,您无法修改它们,但您需要替换它们。您不能替换 a 中的整个对象For Each
,因此您需要For
.
但请注意,这将删除前两个字符(基于 .NET 的索引为零)并且也不检查字符串长度是否 >= 2。所以这似乎是您需要的:
myList(i) = If(str.Length >= 1, str.Substring(1), str)
推荐阅读
- ios - 如何将分发方式从私有更改为公共?
- c# - 如何将渐变颜色添加到 DataGridView 突出显示的行 C#
- c# - 如何使用 c# 从 cudy lte n300 4g 路由器发送短信
- php - 使用 docker-compose up 构建 PHP 与 sudo 有问题
- snakemake - 一个snakemake作业会错误地同时运行两次吗?
- javascript - 如何使单用户输入对所有页面的行为产生影响?
- javascript - 设备指纹未记录在 Jmeter 脚本中
- java - 电子邮件地址格式错误 Firebase/android 项目
- python - 如何让敌人追逐玩家?我也想知道当我跳跃时如何跳到移动的物体上,而不仅仅是穿过它
- python - 如何在未找到 XPath 并覆盖以前的标签时显示其他内容