2013-10-11 4 views
1

, когда я делаюКоллекция в строку с разделителями

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

Я получаю строку объекта дескрипторов вместо пункта значений. Но когда я перебираю коллекцию, я заканчиваю разделителем спереди или сзади и затем должен вызвать вызов подстроки.

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

Массив уже сделан, я хочу взять свойство элементов в строку с разделителями, без explitl rebuilding – aelgoa

+0

Я добавил здание коллекции как пример, потому что ваш вопрос не содержал какой тип коллекции ваш вопрос около. И коллекция не совпадает с массивом. – dummy

3

Вы должны преобразовать элементы в строки, то:

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

+1, но технически, я бы назвал 'ToString' как * convert *, а не * casting *. 'DirectCast' - это * литье *. Практически все остальное в VB.NET, включая 'CType' и' ToString', можно было точно описать как преобразование. –

+0

ty, я выбрал dbasnett как ответ, потому что я ожидаю, что он будет немного быстрее, чем LINQ – aelgoa

Смежные вопросы