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

FI.Nameを文字列に変換してから、配列に追加したいと思います。これどうやってするの?

4

15 に答える 15

467

配列は長さが固定されているため、アイテムを配列に追加することはできません。あなたが探しているのは、List<string>後でそれを使って配列に変えることができるlist.ToArray()、例えば

List<string> list = new List<string>();
list.Add("Hi");
String[] str = list.ToArray();
于 2009-09-17T17:40:27.880 に答える
143

または、配列のサイズを変更することもできます。

Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = "new string";
于 2009-09-17T17:48:17.630 に答える
71

System.Collections.GenericのList<T>を使用します

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

…

myCollection.Add(aString);

または、省略形(コレクションイニシャライザーを使用):

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

最後に本当に配列が必要な場合は、

myCollection.ToArray();

IEnumerableなどのインターフェイスに抽象化してから、コレクションを返す方がよい場合があります。

編集:配列を使用する必要がある場合は、適切なサイズ(つまり、所有しているFileInfoの数)に事前に割り当てることができます。次に、foreachループで、次に更新する必要のある配列インデックスのカウンターを維持します。

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;
}
于 2009-09-17T17:39:36.490 に答える
31

イージー

// 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();
于 2014-01-27T09:28:02.777 に答える
9

私が間違っていなければ、それは次のとおりです。

MyArray.SetValue(ArrayElement, PositionInArray)
于 2012-08-02T06:48:54.300 に答える
6

これは、必要に応じて文字列に追加する方法です。

string[] myList;
myList = new string[100];
for (int i = 0; i < 100; i++)
{
    myList[i] = string.Format("List string : {0}", i);
}
于 2015-05-18T23:20:22.860 に答える
3

foreachを使用する代わりにforループを使用してみませんか。このシナリオでは、foreachループの現在の反復のインデックスを取得する方法はありません。

この方法で、ファイルの名前をstring[]に追加できます。

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;
}
于 2014-12-19T08:15:56.113 に答える
2
string[] coleccion = Directory.GetFiles(inputPath)
    .Select(x => new FileInfo(x).Name)
    .ToArray();
于 2009-09-17T17:46:05.660 に答える
1

このコードは、Androidでスピナーの動的値配列を準備するのに最適です。

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


    String[] yearStringArray = (String[]) yearStringList.toArray(new String[yearStringList.size()]);
于 2017-04-07T11:29:22.890 に答える
1

配列をクリアし、同時にその要素の数を0にするには、これを使用します。

System.Array.Resize(ref arrayName, 0);
于 2017-06-28T02:08:53.723 に答える
1

Linqへの参照を追加しusing System.Linq;、提供されている拡張メソッドを使用しAppendます。次に、メソッドを使用public static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) するように変換し直す必要があります。string[].ToArray()

タイプがをstring[]実装しているため、IEnumerable次のインターフェイスも実装してIEnumerable<char>いる可能性があります: 、、、、、、、、IEnumerableIComparableIComparable<String>IConvertibleIEquatable<String>ICloneable

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

ToArrayは新しい配列を割り当てることを忘れないでください。したがって、要素をさらに追加していて、どれだけの要素を使用するかわからない場合は、System.Collections.GenericのListを使用することをお勧めします。

于 2018-07-24T08:12:32.887 に答える
0

この場合、配列は使用しません。代わりに、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;
}
于 2009-09-17T17:52:34.687 に答える
0
string[] MyArray = new string[] { "A", "B" };
MyArray = new List<string>(MyArray) { "C" }.ToArray();
//MyArray = ["A", "B", "C"]
于 2018-04-25T12:11:07.110 に答える
0

拡張機能を作成します。

public static class TextFunctions
{
    public static string [] Add (this string[] myArray, string StringToAdd)
    {
          var list = myArray.ToList();
          list.Add(StringToAdd);
          return list.ToArray();
    }
}

そしてそれをそのように使用します:

foreach (FileInfo FI in listaDeArchivos)
{
    //Add the FI.Name to the Coleccion[] array, 
    Coleccion.Add(FI.Name);
}
于 2022-02-03T18:16:07.927 に答える
-1

私はこのようにします:

DirectoryInfo X = new DirectoryInfo(Path);
FileInfo[] listaDeArchivos = X.GetFiles();
string[] Coleccion = new String[] { };

foreach (FileInfo FI in listaDeArchivos)
{
    Coleccion = Coleccion.Concat(new string[] { FI.Name }).ToArray();
}

return Coleccion;
于 2020-11-02T20:21:48.943 に答える