Как добавить строку в массив string []? Там нет. Добавить функцию - PullRequest
196 голосов
/ 17 сентября 2009
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 в строку и затем добавить ее в мой массив. Как я могу это сделать?

Ответы [ 13 ]

353 голосов
/ 17 сентября 2009

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

98 голосов
/ 17 сентября 2009

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

Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = "new string";
55 голосов
/ 17 сентября 2009

Использовать список из System.Collections.Generic

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

…

myCollection.Add(aString);

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

myCollection.ToArray();

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

Edit: если вы должны использовать массив, вы можете предварительно выделить его до нужного размера (то есть количества имеющейся у вас 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;
}
26 голосов
/ 27 января 2014

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();
10 голосов
/ 02 августа 2012

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

MyArray.SetValue(ArrayElement, PositionInArray)
5 голосов
/ 19 мая 2015

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

string[] myList;
myList = new string[100];
for (int i = 0; i < 100; i++)
{
    myList[i] = string.Format("List string : {0}", i);
}
3 голосов
/ 19 декабря 2014

Почему бы вам не использовать цикл 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;
}
3 голосов
/ 17 сентября 2009
string[] coleccion = Directory.GetFiles(inputPath)
    .Select(x => new FileInfo(x).Name)
    .ToArray();
1 голос
/ 07 апреля 2017

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

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


    String[] yearStringArray = (String[]) yearStringList.toArray(new String[yearStringList.size()]);
0 голосов
/ 24 июля 2018

Добавление ссылки на 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();  
...