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

您不能将项目添加到数组中,因为它具有固定长度。您正在寻找的是 a 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

为什么不使用 for 循环而不是使用 foreach。在这种情况下,您无法获取 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

要清除数组并同时使其元素数= 0,请使用此..

System.Array.Resize(ref arrayName, 0);
于 2017-06-28T02:08:53.723 回答
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

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

有可能,因为该类型string[]实现IEnumerable了 ,它还实现了以下接口:IEnumerable<char>, IEnumerable, IComparable, IComparable<String>, IConvertible, IEquatable<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

创建扩展:

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 回答
0
string[] MyArray = new string[] { "A", "B" };
MyArray = new List<string>(MyArray) { "C" }.ToArray();
//MyArray = ["A", "B", "C"]
于 2018-04-25T12:11:07.110 回答
-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 回答