#vb.net #list
#vb.net #Список
Вопрос:
У меня есть простой список строк, и что мне нужно сделать, это добавить «@» в начало каждого элемента и присоединиться к списку, чтобы получить что-то вроде: «@item1, @item2, ….»
мой код до сих пор:
Dim list As New List(Of String)({"item1", "item2", "item3", "item4"})
' create a copy of list to prevent altering it
Dim listCopy As List(Of String) = list
For i As Integer = 0 To listCopy.Count - 1
list(i) = "@" amp; listCopy(i)
Next
Dim result As String = String.Join(", ", list.ToArray())
Хотя это и выполняет свою работу, но я чувствую, что это слишком много кода для простой функции, то же самое можно сделать в python или javascript намного проще, например:
python:
copyList = [("@" x) for x in list]
javascript:
copylist = list.map(function(x){return '@' x})
Есть ли аналогичная функция в vb.net ?
Ответ №1:
Да, вы можете использовать метод LINQ Select для достижения этой цели:
Dim list As New List(Of String)({"item1", "item2", "item3", "item4"})
dim list1 = list.Select(function (i) "@" i)
for each item in list1
Console.WriteLine(item)
next item
И на выходе получается:
@item1
@item2
@item3
@item4
Результатом является IEnumerable (Of String)
объект. Если вы хотите снова List (Of String)
использовать ToList()
метод расширения:
dim list1 = list.Select(function (i) "@" i).ToList()
Комментарии:
1. Рад, что ответ помог. LINQ to Objects обладает множеством функциональных преимуществ.
Ответ №2:
Используйте LINQ:
Dim result = (From s In list Select "@" amp; s)
Комментарии:
1. мне не нужно определять тип результата, например:
Dim result As List(Of String)
?2. Просто для ясности, результат
IEnumerable(Of String)
, и нет, вы этого не делаете. Даже при включенной опции strict.