2013-10-11 45 views
1

当我做收集到分隔字符串

String.Join(";", lst.Items) 

我得到的对象描述的字符串,而不是价值的项目。 但是,当我迭代集合时,我最终在前面或后面有一个分隔符,之后需要一个Substring调用。

Dim res As String = "" 'or use stringbuilder 
    For Each s As String In lst.Items 
     s &= ";" & s 
    Next 
    res = res.Substring(1) 

这适用于其他情况,以及您希望将集合中的共享属性转换为分隔字符串的情况。有没有一个很好的方法来做到这一点? 我可以用LINQ来做到这一点,它会更快吗?

+0

没有,ObjectCollections已经公开了e IList接口,但它们包含对象而不是字符串。 – aelgoa

回答

1

如何

Dim res As String = String.Join(";", lst.Items.OfType(Of String)) 
0

这并不工作:

Dim col As New Collection 
    col.Add("One") 
    col.Add("Two") 
    col.Add("Three") 

    Dim res = String.Join(";", col.OfType(Of String)) 

参见this question

+0

该数组已被创建,我想将这些元素的属性转换为分隔字符串,而不需要重新构建 – aelgoa

+0

我添加了该集合的构建,只是作为一个示例,因为您的问题没有包含您的问题的集合类型是关于。而一个集合与数组不一样。 – dummy

3

你必须的物品转换为字符串,然后:

String.Join(";", lst.Items.Select(Function(item) item.ToString())); 
+2

+1,但从技术上讲,我会将'ToString'称为*转换*,而不是*转换*。 'DirectCast'是* cast *。几乎VB.NET中的其他东西,包括'CType'和'ToString',只能被精确地描述为转换。 –

+0

ty,我选择dbasnett作为答案的原因,我认为它比LINQ更快一点 – aelgoa