VB.NET: добавить строку ко всем строкам в списке строк.Есть ли существующий метод, который делает это? - PullRequest
4 голосов
/ 05 августа 2010

У меня есть список строк. Для каждой строки в этом списке я хочу добавить еще одну строку. Я написал метод для этого, но мне было интересно, есть ли что-то уже в .NET, я мог бы использовать для этого. Кажется, что-то, что можно встроить, но я не смог ничего найти.

Вот метод, который я написал:

Private Function PrependToAllInList(ByRef inputList As List(Of String), ByRef prependString As String) As List(Of String)
    Dim returnList As List(Of String) = New List(Of String)
    For Each inputString As String In inputList
        returnList.Add(String.Format("{0}{1}", prependString, inputString))
    Next
    Return returnList
End Function

Это работает, но я бы предпочел использовать встроенные функции, когда это возможно. Спасибо за вашу помощь.

Ответы [ 5 ]

6 голосов
/ 05 августа 2010

Если вы можете использовать LINQ (.NET 3.5 или выше), вы можете использовать простой запрос LINQ для выполнения работы за вас:

Dim qry = stringList.Select(Function(s) "prepend this " & s)
Dim returnList = qry.ToList()

По умолчанию Select() возвращает IEnumerable(Of String), который должен работать.Если вам действительно нужно, чтобы коллекция была списком, вы можете включить команду .ToList().Однако, если вы планируете выполнять итерацию по коллекции (например, For Each s As String in qry), нет необходимости брать на себя расходы по преобразованию ее обратно в список.

0 голосов
/ 05 августа 2010

Кроме того, вы можете использовать string.concat для объединения двух строк, а не string.format.

Так что вместо

String.Format("{0}{1}", prependString, inputString)

Вы могли бы просто поставить

String.Concat(prependString, inputString)

... как вы, похоже, хотите, чтобы ваш код был максимально чистым:)

0 голосов
/ 05 августа 2010

Вы можете использовать String.Insert вместо вашего String.Format, чтобы приблизить его к ожидаемому.

String.Insert

0 голосов
/ 05 августа 2010

То, о чем вы говорите, это функция отображения, я не встречал никаких предопределенных функций отображения в vb.net, но вы могли бы достичь этого либо способом, которым вы пользуетесь, либо используя лямбда-выражения, делегаты или LINQ.

Здесь есть отличный пост в блоге об использовании делегатов для этой цели на http://www.panopticoncentral.net/archive/2006/12/08/18587.aspx

Радость в том, что он будет работать в .NET 2.0 - но он не так элегантен, как LINQ, который можно использовать в 3.5 и выше ...

inputList.Select(Function(s) String.Format("{0}{1}", pre, s).ToList();
0 голосов
/ 05 августа 2010
returnList = strlistList.Aggregate(New List(Of String), _
                 Function(list, s) list.Add("prepend this " & s) )

(заметьте, я прога C #, поэтому не уверен насчет синтаксиса)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...