web-dev-qa-db-fra.com

Comment ajouter une chaîne à un tableau de chaînes []? Il n'y a pas de fonction .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;
}

J'aimerais convertir le FI.Name en une chaîne, puis l'ajouter à mon tableau. Comment puis-je faire ceci?

184
Sergio Tapia

Vous ne pouvez pas ajouter d'éléments à un tableau, car il a une longueur fixe. Vous recherchez un List<string>, qui peut être transformé en tableau par la suite à l'aide de list.ToArray().

341
Saulius Valatka

Alternativement, vous pouvez redimensionner le tableau.

Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = "new string";
93
Siebe Tolsma

Utiliser la liste <T> de System.Collections.Generic

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

…

myCollection.Add(aString);

Si vous voulez vraiment un tableau à la fin, utilisez

myCollection.ToArray();

Il serait peut-être préférable d’abstraire dans une interface, telle que IEnumerable, puis de simplement renvoyer la collection.

Éditer: Si vous devez utiliser un tableau, vous pouvez le préallouer à la bonne taille (c’est-à-dire le nombre de FileInfo que vous avez). Ensuite, dans la boucle foreach, maintenez un compteur pour l'index de tableau que vous devez mettre à jour ensuite.

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;
}
53
Adam Wright

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();
26
NoloMokgosi

Si je ne me trompe pas c'est:

MyArray.SetValue(ArrayElement, PositionInArray)
10
Stefan Nicolov

Voici comment j'ajoute une chaîne si nécessaire:

string[] myList;
myList = new string[100];
for (int i = 0; i < 100; i++)
{
    myList[i] = string.Format("List string : {0}", i);
}
5
kittugadu
string[] coleccion = Directory.GetFiles(inputPath)
    .Select(x => new FileInfo(x).Name)
    .ToArray();
3
xcud

Pourquoi n'utilisez-vous pas une boucle for au lieu d'utiliser foreach? Dans ce scénario, vous ne pouvez pas obtenir l'index de l'itération actuelle de la boucle foreach.

Le nom du fichier peut être ajouté à la chaîne [] de cette manière, 

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
Sarath Rachuri

Ce code fonctionne très bien pour préparer les valeurs dynamiques Array pour spinner dans Android:

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


    String[] yearStringArray = (String[]) yearStringList.toArray(new String[yearStringList.size()]);
1
Taras Vovkovych

Ajoutez une référence à Linq using System.Linq; et utilisez la méthode d'extension fournie Append: public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) Vous devez ensuite le reconvertir en string[] à l'aide de la méthode .ToArray().

Il est possible, car le type string[] implémente IEnumerable, il implémente également les interfaces suivantes: IEnumerable<char>, IEnumerable, IComparable, IComparable<String>, IConvertible, IEquatable<String>, ICloneable

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

Je ne voudrais pas utiliser un tableau dans ce cas. Au lieu de cela, je voudrais utiliser un 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;
}
0
user175116
string[] MyArray = new string[] { "A", "B" };
MyArray = new List<string>(MyArray) { "C" }.ToArray();
//MyArray = ["A", "B", "C"]
0
Konstantin Lapeev

pour effacer le tableau et rendre le nombre de ses éléments = 0 en même temps, utilisez ceci ..

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