2013-10-11 61 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