与List(Of String)连接

时间:2014-03-20 20:26:06

标签: .net arrays vb.net list

我很难确定如何将一个简单的字符串连接到每个元素的末尾。任何帮助赞赏。请参阅以下示例代码:

Dim Results As New List(Of String)

Results.Add("Test1")
Results.Add("Test2")
Results.Add("Test3")

For Each item in Results
    item = item.ToString.Concat(item.ToString, " xx") '  <--- This won't work!
Next

4 个答案:

答案 0 :(得分:4)

问题在于,您只需将item变量指向全新的String对象。

这样做,它会做你想要的:

For i As Integer = 0 To Results.Count - 1
    Results(i) &= "xx"
Next

<强>更新

如果您想要一个更优雅但仍然高效的解决方案,请考虑在代码中的某处添加以下扩展方法:

Namespace SomeNamespace
    <Microsoft.VisualBasic.HideModuleName()> _
    Public Module SomeModule
        <System.Runtime.CompilerServices.Extension()> _
        Public Sub ForEachIndex(Of T)(ByVal collection As ICollection, ByVal action As Action(Of Integer))
            For i As Integer = 0 To collection.Count
                action(i)
            Next
        End Sub
    End Module
End Namespace

从那时起,如果您在代码中导入SomeNamespace命名空间,则可以执行此操作。

Results.ForEachIndex(Sub(i) Results(i) &= "xx")

通过这种方式,您既优雅又高效:不会创建新列表,旧字符串就可以立即收集垃圾。

此外,新创建的ForEachIndex扩展程序适用于任何ICollection实施。 ;)

请注意,您还可以将其设为IEnumerable扩展名并使用LINQ的Count扩展名来了解您拥有的元素数量。这将涵盖更多场景,但在某些情况下,您的里程可能会开始变化。请记住,IEnumerable实例可能表示未编译的元素序列。

答案 1 :(得分:2)

LINQ可以帮助您:

Results = Results.Select(Function(x) x & "xx").ToList

答案 2 :(得分:1)

再次,使用LINQ:

Dim Results As New List(Of String)
Results.Add("Test1")
Results.Add("Test2")
Results.Add("Test3")

Dim result As String = Results.Aggregate(String.Empty, Function(currentItem, nextItem) currentItem & " xx " & nextItem)

你在寻找这样的东西: 打印Test1 xx Test2 xx Test3 xx

编辑:

我误解了你的要求。 Neolisk有一个正确的答案。 以下是其他几种编写方法:

Result = Result.Select(Function(x) String.Format("{0} xx", x)).ToLisT()

或者

Result = (From x In Result
          Select x & " xx").ToList()

或者

Result = (From x In Result
          Select String.Format("{0} xx", x).ToList()

答案 3 :(得分:0)

为什么在将列表转换为数组后不使用Join函数?

例如

dim newlist = yourlist.toarray

dim newstring = Join(&#34; yourstring&#34;,newlist)