如何将字符串添加到string []数组?没有.Add功能

时间:2009-09-17 17:38:25

标签: c# arrays long-filenames

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转换为字符串,然后将其添加到我的数组中。我怎么能这样做?

14 个答案:

答案 0 :(得分:351)

您无法向数组添加项目,因为它具有固定长度,您要查找的是List<string>,稍后可以使用list.ToArray()将其转换为数组。

答案 1 :(得分:98)

或者,您可以调整阵列的大小。

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

答案 2 :(得分:55)

使用列表&lt; T&gt;来自System.Collections.Generic

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

…

myCollection.Add(aString);

如果你真的想要一个数组,请使用

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

答案 3 :(得分:26)

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

答案 4 :(得分:10)

如果我没弄错的话是:

MyArray.SetValue(ArrayElement, PositionInArray)

答案 5 :(得分:5)

这是我在需要时添加到字符串的方式:

size_t

答案 6 :(得分:3)

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

答案 7 :(得分:3)

为什么不使用for循环而不是使用foreach。在这种情况下,您无法获得foreach循环的当前迭代的索引。

可以通过这种方式将文件名添加到字符串[]中,

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

答案 8 :(得分:1)

此代码非常适合在Android中为微调器准备动态值Array:

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


    String[] yearStringArray = (String[]) yearStringList.toArray(new String[yearStringList.size()]);

答案 9 :(得分: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;
}

答案 10 :(得分:0)

清除数组并同时使其数量= 0,使用此..

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

添加对Linq using System.Linq;的引用,并使用提供的扩展方法Appendpublic static IEnumerable<TSource> Append<TSource>(this IEnumerable<TSource> source, TSource element) 然后,您需要使用string[]方法将其转换回.ToArray()

因为类型string[]实现了IEnumerable,所以它也可能实现了以下接口:IEnumerable<char>IEnumerableIComparable,{{1 }},IComparable<String>IConvertibleIEquatable<String>

ICloneable

答案 13 :(得分:0)

我会这样:

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;