2009-09-17 8 views
165
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; 
} 

Me gustaría convertir el FI.Name en una cadena y luego agregarlo a mi matriz. ¿Cómo puedo hacer esto?Cómo agregar una cadena a una cadena []? No hay función .Add

Respuesta

302

No es posible añadir elementos a una matriz, ya que posee un número fijo, lo que estás buscando es un List<string>, que luego se puede convertir a una matriz mediante list.ToArray().

+2

+1. Continuaré y ofreceré un enlace a mi respuesta sobre este tema. http: // stackoverflow.com/questions/1168915/which-one-is-more-effecient-listint-or-int/1168922 # 1168922 –

+1

"No se pueden agregar elementos a una matriz" - de hecho se puede, ver a continuación. –

47

Usar lista < T> de System.Collections.Generic

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

… 

myCollection.Add(aString); 

Si realmente quiere un arreglo al final, utilice

myCollection.ToArray(); 

Usted puede ser mejor abstraer a una interfaz, como IEnumerable, luego simplemente devolviendo la colección.

Editar: Si debe utilizar una matriz, puede preasignarla al tamaño correcto (es decir, el número de FileInfo que tiene). Luego, en el ciclo foreach, mantenga un contador para el índice de matriz que necesita actualizar a continuación.

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

Mi método para unir solo recibe un conjunto de cadenas [], no puedo usar un List <>. ¿Hay alguna manera de resolver esto usando una Matriz? –

+1

Use una lista y luego, cuando necesite la matriz, llame al método ToArray –

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

Alternativamente, puede cambiar el tamaño de la matriz.

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

'Array.Resize' * es * la forma correcta de cambiar el tamaño de una matriz. Si agrega un comentario antes del fragmento de código diciendo que rara vez es la mejor manera de manejar situaciones en las que la matriz representa una colección de tamaño variable, tiene un +1. :) –

+8

En realidad, esta es la (única) respuesta que resuelve exactamente la pregunta OP. – dialex

0

No utilizaría una matriz en este caso. En cambio, usaría una 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 no me equivoco es:

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

* 'Agregar', no' agregar'. – bigp

2

¿Por qué no utilizar un bucle en lugar de utilizar foreach. En este escenario, no hay forma de que pueda obtener el índice de la iteración actual del ciclo foreach.

El nombre del archivo puede ser añadido a la cadena [] de esta manera,

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

Así es como agrego a una cadena cuando sea necesario:

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

Este código funciona muy bien para la preparación de los valores de matriz dinámica para spinner en 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

para borrar la matriz y hacer que el número de elementos que es = 0 una Al mismo tiempo, use esto ..

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