Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 覆盖子对象中的(字符串)元素列表_String_Vb.net_Byref - Fatal编程技术网

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