我很难确定如何将一个简单的字符串连接到每个元素的末尾。任何帮助赞赏。请参阅以下示例代码:
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
答案 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)