如何使用"For Each"循环修改字符串?

Dan*_*don 5 .net vb.net string foreach loops

       'Why doesn't this work?
    Dim myStrings As String() = New String() {string1, string2, string3,}
    For Each s As String In myStrings
        If String.IsNullOrEmpty(s) Then
            s = ""
        End If
        s = "-" & s.Trim() & "-"
    Next
Run Code Online (Sandbox Code Playgroud)

如果string1包含"foo",我的意图是在循环执行后string1包含"-foo-".我怎样才能做到这一点?

我猜这个代码会复制我的字符串并修改它们.如何在循环中修改字符串?

更新 我修改了代码以使用数组索引:

    ' It still doesn't work.
    Dim myStrings As String() = New String() {string1, string2, string3}
    For i As Integer = 0 To myStrings.Count() - 1
        If String.IsNullOrEmpty(myStringss(i)) Then
            myStringss(i) = ""
        End If
        myStrings(i) = "-" & myStrings(i) & "-"
    Next
Run Code Online (Sandbox Code Playgroud)

此代码的结果,特别是指每个元素的数组和索引,修改了数组,但我的字符串仍然具有相同的旧值.显然,初始化这样的数组只是将我的值复制到一个新数组中.如何在循环中修改原始值?

重点:该数组仅用于循环目的.我需要修改string1,string2以及string3类似的,但是一旦这个循环是直通,没有为数组不能多用.哦,我的真实代码有超过3个字符串.

我只想说,如果我是使用更多的指针和引用一门语言,我想我也只会指向数组的指针string1,string2, andstring3`.将这些字符串复制到数组中似乎是多余的.

Gag*_*age 5

此示例在C#中,但同样的原则适用.

string[] myStrings = new string[] { "temp", "temp2", "temp3" };
myStrings = myStrings.Select(x => "-" + x + "-").ToArray();
Run Code Online (Sandbox Code Playgroud)

输出:

"-temp-"" - temp2-"" - temp3-"

链接到MSDN文章:http://msdn.microsoft.com/en-us/library/bb548891.aspx

您还可以使用委托函数来检查字符串是否为空.将在提供VB解决方案和编辑时工作

编辑:

Dim myStrings As String() = _
        {"apple", "banana", "mango", Nothing, "passionfruit", "grape"}
    myStrings = _
        myStrings.Select(Function(fruit) ("-" & fruit & "-")).ToArray()
Run Code Online (Sandbox Code Playgroud)

输出:

"-apple-"" - banana-"" - mango - "" - "" - passionfruit-"" - grape-"

编辑2:与第一次编辑相同但更具可读性

Private Function TESTER(ByVal fruit As String) As String
    Return "-" & fruit & "-"
End Function

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)              Handles MyBase.Load
    Dim myStrings As String() = _
       New String() {"apple", "banana", "mango", Nothing, "passionfruit", "grape"}
    myStrings = _
        myStrings.Select(AddressOf TESTER).ToArray()
End Sub
Run Code Online (Sandbox Code Playgroud)


Jus*_*tin 2

这不起作用,因为字符串在 .Net 中是不可变的 -string1如果不明确设置string1为某个值,则无法更改 的值,即通过执行以下操作:

string1 = "Blah";
Run Code Online (Sandbox Code Playgroud)

(请注意,您可以i通过(例如)使用for而不是更改 myString 数组中第 th 个字符串值的值foreach,但是从我收集的情况来看,这不是您想要做的)

为了解决您的问题,您需要更好地了解您要解决的问题,例如,您可以通过调整界面来避免以这种方式修改字符串引用的需要(请参阅此问题以获取灵感)