Как уже упоминалось, технически невозможно удалить элемент из массива. Единственный способ изменить количество элементов в массиве - создать целый новый массив и скопировать содержимое из одного в другое. Есть более удобные методы, которые вы можете использовать для этого, но, в конце концов, это то, что они на самом деле делают для вас, просто за кулисами.
Если вы собираетесь делать много такого, я бы рекомендовал использовать класс List(Of String)
, а не массив String
. Как отмечали другие, класс List(Of T)
специально разработан, чтобы сделать эти виды динамических функций более простыми. Если вам когда-нибудь понадобится список как массив, вы можете очень легко (и эффективно) преобразовать его в массив как это:
Dim myList As New List(Of String)()
myList.Add("Apple")
myList.Add("Banana")
myList.Add("Orange")
myList.RemoveAt(1)
Dim myArray() As String = myList.ToArray()
Однако, если вы действительно должны иметь его как массив, LINQ делает его немного легче. Импортируя пространство имен LINQ, многие новые методы расширения LINQ будут добавлены в массивы (и любой другой список или перечислимые объекты). Например, вы могли бы использовать Except
метод LINQ, как и это:
Dim dynamic() As String = {"Apple", "Banana", "Orange"}
dynamic = dynamic.Except({"Banana"}).ToArray()
Обратите внимание, что метод возвращает Except
перечислимого объекта, но не массив. Чтобы преобразовать его в массив, вам необходимо дополнительно вызвать метод LINQ ToArray
, как в приведенном выше примере. Этот выше пример удаляет строку "Banana"
из середины массива. Если, однако, вы не знаете значения, и вы просто хотите удалить его по индексу, LINQ не предоставляет способ фильтрации по индексу, подобному этому. Вы можете по-прежнему использовать метод Except
, как это, хотя:
Dim dynamic() As String = {"Apple", "Banana", "Orange"}
dynamic = dynamic.Except({dynamic(1)}).ToArray()
Вы можете быть удивлены, почему я поставил фигурные скобки вокруг параметра, переданного методу Except
. Я сделал это, потому что метод Except
фактически принимает список параметров (например, IEnumerable
). Поскольку реализация массива IEnumerable
(а также IList
, кстати), я только что завернул параметр в массив, прежде чем передать его методу. Интересным результатом этого является то, что если у вас есть несколько элементов для удаления, вы можете сделать их все в одной команде, например:
Dim dynamic() As String = {"Apple", "Banana", "Orange"}
dynamic = dynamic.Except({"Apple", "Banana"}).ToArray()
Вы не можете удалить элемент из массива. Вам нужно создать новый массив и пропустить копирование индекса, который вам не нужен. –
Используйте Instast List (String) для массива, и вы можете использовать LINQ – Plutonix