String 覆盖子对象中的(字符串)元素列表
下面的示例已简化。在我的项目中,我有一个很大的String 覆盖子对象中的(字符串)元素列表,string,vb.net,byref,String,Vb.net,Byref,下面的示例已简化。在我的项目中,我有一个很大的列表(字符串),其中我必须对字符串进行一些操作。为此,我创建了一个子Sub,在那里我进行操作,它应该重写列表(字符串)的元素 字符串操作本身在子对象中工作,但不会写入初始列表对象。实际上,我认为使用ByRef可以做到这一点。是否有可能这样做,而我只是有一个错误,或者我必须使用函数创建一个新的列表(字符串),并重写初始对象。比如: myList = foo(myList) 如果两者都能起作用,什么更有效率?由于我必须在一个包含数十万个元素的列表(字符
列表(字符串)
,其中我必须对字符串进行一些操作。为此,我创建了一个子Sub
,在那里我进行操作,它应该重写列表(字符串)
的元素
字符串操作本身在子对象中工作,但不会写入初始列表对象。实际上,我认为使用ByRef
可以做到这一点。是否有可能这样做,而我只是有一个错误,或者我必须使用函数创建一个新的列表(字符串)
,并重写初始对象。比如:
myList = foo(myList)
如果两者都能起作用,什么更有效率?由于我必须在一个包含数十万个元素的列表(字符串)上执行此操作。您必须为-循环使用一个
,您不能为每个
修改一个字符串:
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
您可以为每个
对象修改,但由于字符串是不可变的,您不能修改它们,但需要替换它们。不能为每个
替换中的整个对象,因此需要为
替换
但是请注意,这将删除前两个字符(在.NET中索引是零基的),并且也不会检查字符串长度是否大于等于2。所以这似乎是你需要的:
myList(i) = If(str.Length >= 1, str.Substring(1), str)
在此代码中:
For Each str As String In myList
str = str.Substring(2)
Next
您正在将操作结果分配给str
,而str
只是一个局部变量。实际上,您必须将结果放入列表
,您可以通过设置项
属性来执行此操作。扔掉那个ByRef
,因为它是一条红鲱鱼。只需将用于如下循环:
For I = 0 To myList.Count - 1
myList(i) = myList(i).Substring(2)
Next
ByRef
将允许您使用完全不同的列表替换传递到myList
中的列表,但如果您只想修改现有列表,则不需要它。由于List(Of T)
是一种引用类型,因此参数总是可变的,ByVal
或ByRef
表示可以将引用的对象更改为其他对象,而不是更改对象的状态。
For I = 0 To myList.Count - 1
myList(i) = myList(i).Substring(2)
Next