Bagaimana cara menambahkan string ke array string []? Tidak ada fungsi .Tambahkan

222
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;
}

Saya ingin mengonversi FI.Nameke string dan kemudian menambahkannya ke array saya. Bagaimana saya bisa melakukan ini?

Sergio Tapia
sumber

Jawaban:

395

Anda tidak dapat menambahkan item ke array, karena panjangnya telah diperbaiki. Apa yang Anda cari adalah a List<string>, yang nantinya dapat diubah menjadi array menggunakan list.ToArray(), misalnya

List<string> list = new List<string>();
list.Add("Hi");
String[] str = list.ToArray();
Saulius Valatka
sumber
3
+1 Saya akan melanjutkan dan menawarkan tautan ke jawaban saya tentang hal ini. stackoverflow.com/questions/1168915/…
Sam Harwell
2
"Anda tidak dapat menambahkan item ke array" - sebenarnya Anda bisa, lihat di bawah.
Alex Strickland
112

Atau, Anda dapat mengubah ukuran array.

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

sumber
6
Array.Resize adalah cara yang tepat untuk mengubah ukuran array. Jika Anda menambahkan komentar sebelum cuplikan kode yang mengatakan itu jarang cara terbaik untuk menangani situasi di mana array mewakili koleksi resizable Anda mendapat +1. :)
Sam Harwell
12
Sebenarnya, ini adalah (hanya) jawaban yang secara tepat menyelesaikan pertanyaan OP.
Dialex
66

Gunakan Daftar <T> dari System.Collections.Generic

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



myCollection.Add(aString);

Atau, singkatan (menggunakan initialiser koleksi):

List<string> myCollection = new List<string> {aString, bString}

Jika Anda benar-benar menginginkan sebuah array di akhir, gunakan

myCollection.ToArray();

Anda mungkin lebih baik mengabstraksi ke antarmuka, seperti IEnumerable, lalu hanya mengembalikan koleksi.

Sunting: Jika Anda harus menggunakan array, Anda dapat melakukan praallokasi ke ukuran yang tepat (yaitu jumlah FileInfo yang Anda miliki). Kemudian, di loop foreach, pertahankan counter untuk indeks array yang perlu Anda perbarui berikutnya.

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;
}
Adam Wright
sumber
Metode saya untuk bergabung hanya menerima larik string [], saya tidak bisa menggunakan Daftar <>. Apakah ada cara bagi saya untuk menyelesaikan ini menggunakan Array?
Sergio Tapia
1
Gunakan Daftar <string> dan kemudian ketika Anda membutuhkan array, panggil metode ToArray
Chris Dunaway
30

mudah

// 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();
NoloMokgosi
sumber
2
* Add, tidak add.
bigp
9

Jika saya tidak salah itu adalah:

MyArray.SetValue(ArrayElement, PositionInArray)
Stefan Nicolov
sumber
6

Inilah cara saya menambahkan string ketika dibutuhkan:

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

Mengapa Anda tidak menggunakan for for alih-alih menggunakan foreach. Dalam skenario ini, tidak ada cara Anda bisa mendapatkan indeks iterasi saat ini dari foreach loop.

Nama file dapat ditambahkan ke string [] dengan cara ini,

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;
}
Sarath Rachuri
sumber
Hanya masalah: Anda HARUS tahu berapa panjang Anda listaDeArchivos. Jika Anda tidak (yaitu jika itu bisa berubah dan akan rumit untuk melakukan penghitungan sebelumnya karena objek Anda adalah model bersarang atau bidang model yang mungkin / mungkin tidak diisi, misalnya) dan Anda hanya ingin melakukan string[] Coleccion;kemudian tetapkan seperti int idx = 0; Coleccion[idx] = fileName; idx++;, itu akan memberi tahu Anda Use of unassigned local variable 'Coleccion'. Hanya FYI bagi siapa pun yang ingin mengadaptasi ini menjadi lebih dinamis, bahwa ada jebakan.
vapcguy
1

Kode ini berfungsi baik untuk menyiapkan nilai dinamis Array untuk pemintal di Android:

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


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

untuk menghapus array dan membuat jumlah elemen itu = 0 pada saat yang sama, gunakan ini ..

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

Saya tidak akan menggunakan array dalam hal ini. Sebagai gantinya saya akan menggunakan 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;
}
DatRid
sumber
0
string[] MyArray = new string[] { "A", "B" };
MyArray = new List<string>(MyArray) { "C" }.ToArray();
//MyArray = ["A", "B", "C"]
Konstantin Lapeev
sumber
Mungkin ide yang baik untuk menjelaskan mengapa array adalah pilihan yang buruk di sini dan OP harus menggunakan Daftar <> untuk memulai.
LueTm
0

Menambahkan referensi ke Linq using System.Linq;dan menggunakan metode ekstensi yang disediakan Append: public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) Maka Anda perlu mengubahnya kembali untuk string[]menggunakan.ToArray() metode tersebut.

Hal ini dimungkinkan, karena jenis string[]alat IEnumerable, juga mengimplementasikan antarmuka berikut: IEnumerable<char>, IEnumerable, IComparable, IComparable<String>, IConvertible, IEquatable<String>,ICloneable

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