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/…
Sam Harwell

2
"배열에 항목을 추가 할 수 없습니다"-실제로는 아래를 참조하십시오.
Alex Strickland 2012 년

112

또는 배열의 크기를 조정할 수 있습니다.

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

6
Array.Resize 배열의 크기를 조절하는 적절한 방법. 코드 스 니펫 앞에 주석을 추가하면 배열이 크기 조정 가능한 컬렉션을 나타내는 상황을 처리하는 가장 좋은 방법은 아니라고 +1합니다. :)
Sam Harwell

12
실제로 이것은 OP 질문을 정확하게 해결하는 유일한 대답입니다.
dialex

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 <>를 사용할 수 없습니다. Array를 사용하여 이것을 해결할 수있는 방법이 있습니까?
Sergio Tapia

1
목록 <문자열>를 사용하고 배열을 필요로 할 때 다음의 ToArray 메서드를 호출
크리스 더너웨이

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


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

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;하고 제공된 확장 메소드를 사용하십시오 Append. public 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();  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.