Как добавить строку в массив string []? Нет функции .Add

private string[] ColeccionDeCortes(string Path)
{
    DirectoryInfo X = new DirectoryInfo(Path);
    FileInfo[] listaDeArchivos = X.GetFiles();
    string[] Coleccion;

    foreach (FileInfo FI in listaDeArchivos)
    {
        //Add the FI.Name to the Coleccion[] array, 
    }

    return Coleccion;
}

Я хотел бы преобразовать FI.Name в строку, а затем добавить ее в свой массив. Как я могу это сделать?


person Sergio Tapia    schedule 17.09.2009    source источник


Ответы (13)


Вы не можете добавлять элементы в массив, так как он имеет фиксированную длину. То, что вы ищете, - это List<string>, который позже можно превратить в массив с помощью list.ToArray(), например.

List<string> list = new List<string>();
list.Add("Hi");
String[] str = list.ToArray();
person Saulius Valatka    schedule 17.09.2009
comment
+1 Я предложу ссылку на свой ответ по этому поводу. stackoverflow.com/questions/1168915/ - person Sam Harwell; 17.09.2009
comment
Вы не можете добавлять элементы в массив - на самом деле вы можете, см. Ниже. - person Alex Strickland; 15.06.2017

Кроме того, вы можете изменить размер массива.

Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = "new string";
person Community    schedule 17.09.2009
comment
Array.Resize - правильный способ изменить размер массива. Если вы добавите комментарий перед фрагментом кода, в котором говорится, что это редко лучший способ справиться с ситуациями, когда массив представляет коллекцию с изменяемым размером, у вас есть +1. :) - person Sam Harwell; 17.09.2009
comment
Фактически, это (единственный) ответ, который точно решает вопрос OP. - person dialex; 07.11.2015

Используйте List ‹T> из System.Collections.Generic

List<string> myCollection = new List<string>();

…

myCollection.Add(aString);

Или сокращенно (с использованием инициализатора коллекции):

List<string> myCollection = new List<string> {aString, bString}

Если вам действительно нужен массив в конце, используйте

myCollection.ToArray();

Возможно, вам лучше абстрагироваться от интерфейса, такого как IEnumerable, а затем просто вернуть коллекцию.

Изменить: если вы должны использовать массив, вы можете предварительно выделить его до нужного размера (то есть количества FileInfo, которое у вас есть). Затем в цикле foreach поддерживайте счетчик для индекса массива, который необходимо обновить следующим образом.

private string[] ColeccionDeCortes(string Path)
{
    DirectoryInfo X = new DirectoryInfo(Path);
    FileInfo[] listaDeArchivos = X.GetFiles();
    string[] Coleccion = new string[listaDeArchivos.Length];
    int i = 0;

    foreach (FileInfo FI in listaDeArchivos)
    {
        Coleccion[i++] = FI.Name;
        //Add the FI.Name to the Coleccion[] array, 
    }

    return Coleccion;
}
person Adam Wright    schedule 17.09.2009
comment
Мой метод присоединения получает только массив string [], я не могу использовать List ‹›. Есть ли способ решить эту проблему с помощью массива? - person Sergio Tapia; 17.09.2009
comment
Используйте List ‹string›, а затем, когда вам понадобится массив, вызовите метод ToArray - person Chris Dunaway; 17.09.2009

Eazy

// Create list
var myList = new List<string>();

// Add items to the list
myList.Add("item1");
myList.Add("item2");

// Convert to array
var myArray = myList.ToArray();
person NoloMokgosi    schedule 27.01.2014
comment
* Add, а не add. - person bigp; 17.05.2016

Если не ошибаюсь, это:

MyArray.SetValue(ArrayElement, PositionInArray)
person Stefan Nicolov    schedule 02.08.2012

Вот как я добавляю к строке, когда это необходимо:

string[] myList;
myList = new string[100];
for (int i = 0; i < 100; i++)
{
    myList[i] = string.Format("List string : {0}", i);
}
person kittugadu    schedule 18.05.2015

Почему бы вам не использовать цикл for вместо использования foreach. В этом сценарии вы не можете получить индекс текущей итерации цикла foreach.

Имя файла может быть добавлено к строке [] таким образом,

private string[] ColeccionDeCortes(string Path)
{
  DirectoryInfo X = new DirectoryInfo(Path);
  FileInfo[] listaDeArchivos = X.GetFiles();
  string[] Coleccion=new string[listaDeArchivos.Length];

  for (int i = 0; i < listaDeArchivos.Length; i++)
  {
     Coleccion[i] = listaDeArchivos[i].Name;
  }

  return Coleccion;
}
person Sarath Rachuri    schedule 19.12.2014
comment
Единственная проблема: вы ДОЛЖНЫ знать, какова ваша длина listaDeArchivos. Если вы этого не сделаете (то есть, если это может когда-либо измениться, и было бы сложно провести подсчет заранее, потому что ваши объекты являются вложенными моделями или полями модели, которые могут / не могут быть заполнены, например), и вы просто хотите сделать string[] Coleccion; затем назначьте его как int idx = 0; Coleccion[idx] = fileName; idx++;, он скажет вам Use of unassigned local variable 'Coleccion'. Просто к вашему сведению для тех, кто хочет адаптировать это, чтобы сделать его более динамичным, это ловушка. - person vapcguy; 03.10.2018

Этот код отлично подходит для подготовки массива динамических значений для счетчика в Android:

    List<String> yearStringList = new ArrayList<>();
    yearStringList.add("2017");
    yearStringList.add("2018");
    yearStringList.add("2019");


    String[] yearStringArray = (String[]) yearStringList.toArray(new String[yearStringList.size()]);
person Taras Vovkovych    schedule 07.04.2017

чтобы очистить массив и одновременно сделать количество его элементов = 0, используйте это ..

System.Array.Resize(ref arrayName, 0);
person DeyaEldeen    schedule 28.06.2017

В этом случае я бы не стал использовать массив. Вместо этого я бы использовал StringCollection.

using System.Collections.Specialized;

private StringCollection ColeccionDeCortes(string Path)   
{

    DirectoryInfo X = new DirectoryInfo(Path);

    FileInfo[] listaDeArchivos = X.GetFiles();
    StringCollection Coleccion = new StringCollection();

    foreach (FileInfo FI in listaDeArchivos)
    {
        Coleccion.Add( FI.Name );
    }
    return Coleccion;
}
person Community    schedule 17.09.2009

Добавление ссылки на Linq using System.Linq; и использование предоставленного метода расширения Append: public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) Затем вам нужно преобразовать его обратно в string[] с помощью метода .ToArray().

Это возможно, поскольку тип string[] реализует IEnumerable, он также реализует следующие интерфейсы: IEnumerable<char>, IEnumerable, IComparable, IComparable<String>, IConvertible, IEquatable<String>, ICloneable

using System.Linq;
public string[] descriptionSet new string[] {"yay"};
descriptionSet = descriptionSet.Append("hooray!").ToArray();  
person proximab    schedule 24.07.2018

Я бы сделал это так:

DirectoryInfo X = new DirectoryInfo(Path);
FileInfo[] listaDeArchivos = X.GetFiles();
string[] Coleccion = new String[] { };

foreach (FileInfo FI in listaDeArchivos)
{
    Coleccion = Coleccion.Concat(new string[] { FI.Name }).ToArray();
}

return Coleccion;
person ItsYeBoi2016    schedule 02.11.2020

person    schedule
comment
Было бы неплохо объяснить, почему массив здесь - плохой выбор, и OP должен использовать List ‹› для начала. - person LueTm; 25.04.2018