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

Chciałbym przekonwertować FI.Name na ciąg znaków, a następnie dodać go do mojej tablicy. Jak mogę to zrobić?Jak dodać ciąg do tablicy ciągów znaków []? Nie ma funkcji Dodaj .Add

Odpowiedz

302

Nie można dodać elementy do tablicy, ponieważ ma stałą długość, co szukasz jest List<string>, które mogą być później odwrócił się do tablicy przy użyciu list.ToArray().

+2

+1 Będę śmiało oferować link do mojej odpowiedzi na ten temat. http: // stackoverflow.com/questions/1168915/which-one-is-more-effecient-listint-or-int/1168922 # 1168922 –

+1

"Nie możesz dodawać elementów do tablicy" - faktycznie możesz to zobaczyć poniżej. –

47

Zastosowanie Lista < T> z System.Collections.Generic

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

… 

myCollection.Add(aString); 

Jeśli naprawdę chcesz tablicę na końcu, użyj

myCollection.ToArray(); 

Możesz być lepiej abstrahując do interfejsu, takie jak IEnumerable, a następnie po prostu zwraca kolekcję.

Edytuj: Jeśli chcesz użyć musisz użyć tablicy, możesz wstępnie przydzielić ją do właściwego rozmiaru (tj. Numer pliku FileInfo, który masz). Następnie, w pętli foreach, utrzymuj licznik dla indeksu tablicy, który musisz zaktualizować w następnej kolejności.

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

Moja metoda łączenia otrzymuje tylko tablicę znaków [], nie mogę użyć listy <>. Czy istnieje sposób, aby rozwiązać ten problem za pomocą tablicy? –

+1

Użyj listy , a następnie, gdy potrzebujesz tablicy, zadzwoń do metody ToArray –

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

Można również zmienić rozmiar tablicy.

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

'Array.Resize' * jest * właściwym sposobem zmiany rozmiaru tablicy. Jeśli dodasz komentarz przed fragmentem kodu, mówiąc, że rzadko jest to najlepszy sposób radzenia sobie z sytuacjami, w których tablica reprezentuje kolekcję o zmiennej wielkości, masz +1. :) –

+8

W rzeczywistości jest to (jedyna) odpowiedź, która dokładnie rozwiązuje pytanie OP. – dialex

0

Nie używałbym w tym przypadku tablicy. Zamiast tego użyłbym 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

Jeśli się nie mylę to jest:

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

* 'Dodaj', nie' dodaj'. – bigp

2

Dlaczego nie można używać dla pętli zamiast używania foreach. W tym scenariuszu nie ma możliwości uzyskania indeksu bieżącej iteracji pętli foreach.

Nazwa pliku może być dodany w ten sposób ciąg [],

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

ten sposób dodać do łańcucha, gdy są potrzebne:

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

Ten kod działa świetnie do przygotowywania wartości dynamicznych Array dla spinnera w systemie 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

aby wyczyścić tablicę i ustawić liczbę jej elementów = 0 a t tym samym czasie, użyj tego ..

System.Array.Resize(ref arrayName, 0); 
Powiązane problemy