string []配列に文字列を追加する方法は?.Add関数はありません


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

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

回答:


395

配列は固定長であるため、配列に項目を追加することはできません。あなたが探しているのは、List<string>後でを使用して配列に変換できるです。list.ToArray()たとえば、

List<string> list = new List<string>();
list.Add("Hi");
String[] str = list.ToArray();

3
+1私は先に進み、このテーマに関する私の回答へのリンクを提供します。stackoverflow.com/questions/1168915/...
サム・ハーウェル

2
「配列に項目を追加することはできません」-実際には追加できます。以下を参照してください。
Alex Strickland 2017年

112

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

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

6
Array.Resize ある配列のサイズを変更する適切な方法。コードスニペットの前にコメントを追加すると、配列がサイズ変更可能なコレクションを表す状況を処理する最良の方法はめったにありません。+ 1を取得します。:)
サムハーウェル

12
実際、これはOPの質問を正確に解決する(唯一の)回答です。
dialex 2015年

66

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

結合する私のメソッドはstring []配列のみを受け取り、List <>を使用できません。配列を使用してこれを解決する方法はありますか?
セルジオタピア

1
List <string>を使用し、配列が必要な場合は、ToArrayメソッドを呼び出します
Chris Dunaway

30

イージー

// 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
* Addではありませんadd
bigp '17年


6

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

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

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

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

唯一の問題:あなたはあなたの長さが何であるかを知らなければなりませんlistaDeArchivos。そうでない場合(つまり、変更される可能性があり、オブジェクトがネストされたモデルまたは入力されない場合があるモデルフィールドであるため、事前にカウントするのが複雑になるなど)を実行したい場合string[] Coleccion;次に、それを好きなようint idx = 0; Coleccion[idx] = fileName; idx++;に割り当てますUse of unassigned local variable 'Coleccion'。これをよりダイナミックに適応させたいと思っている人のためのちょうど参考に、落とし穴があります。
vapcguy 2018年

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

1

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

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

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

0
string[] MyArray = new string[] { "A", "B" };
MyArray = new List<string>(MyArray) { "C" }.ToArray();
//MyArray = ["A", "B", "C"]

ここでなぜ配列が悪い選択であるかを説明するのは良い考えかもしれません。OPはまずList <>を使用する必要があります。
LueTm

0

Linqへの参照を追加しusing System.Linq;、提供されている拡張メソッドを使用し ますAppendpublic 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();  
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.