2009-09-17 17 views

Répondre

302

Vous ne pouvez pas ajouter des éléments à un tableau, car il a une longueur fixe, ce que vous cherchez est un List<string>, qui peut ensuite être tourné vers un tableau en utilisant list.ToArray().

+2

+1 Je vais aller de l'avant et offrir un lien vers ma réponse à ce sujet. http: // stackoverflow.com/questions/1168915/which-one-is-more-effecient-listint-or-int/1168922 # 1168922 –

+1

"Vous ne pouvez pas ajouter d'éléments à un tableau" - vous pouvez en fait, voir ci-dessous. –

47

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

Vous pourriez être mieux abstraire à une interface, tel que IEnumerable, puis retourne simplement la collection. Editer: 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, conservez 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; 
    } 
+0

Ma méthode pour rejoindre ne reçoit qu'un tableau de chaînes [], je ne peux pas utiliser une liste <>. Y at-il un moyen pour moi de résoudre cela en utilisant un tableau? –

+1

Utilisez une liste puis, lorsque vous avez besoin du tableau, appelez la méthode ToArray –

3
string[] coleccion = Directory.GetFiles(inputPath) 
    .Select(x => new FileInfo(x).Name) 
    .ToArray(); 
77

Vous pouvez également redimensionner la baie.

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

'Array.Resize' * est la bonne façon de redimensionner un tableau. Si vous ajoutez un commentaire avant l'extrait de code indiquant que c'est rarement le meilleur moyen de gérer les situations où le tableau représente une collection redimensionnable, vous avez +1. :) –

+8

En fait, c'est la (seulement) réponse qui résout exactement la question OP. – dialex

0

Je n'utiliserais pas de tableau dans ce cas. Au lieu de cela, j'utiliserais 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; 
} 
10

Si je ne me trompe pas, il est:

MyArray.SetValue(ArrayElement, PositionInArray) 
19

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(); 
+2

* "Ajouter", pas "ajouter". – bigp

2

Pourquoi ne pas utiliser une boucle au lieu d'utiliser foreach. Dans ce scénario, il est impossible d'obtenir l'index de l'itération en cours de la boucle foreach.

Le nom du fichier peut être ajouté à la chaîne [] de cette façon,

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

Voici comment ajouter à une chaîne en cas de besoin:

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

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()]); 
0

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

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