[C#] System.Array를 목록으로 변환

어제 밤 나는 다음이 불가능하다는 꿈을 꾸었다. 그러나 같은 꿈에서 SO의 누군가가 다르게 말해주었습니다. 따라서 변환 System.Array이 가능한지 알고 싶습니다.List

Array ints = Array.CreateInstance(typeof(int), 5);
ints.SetValue(10, 0);
ints.SetValue(20, 1);
ints.SetValue(10, 2);
ints.SetValue(34, 3);
ints.SetValue(113, 4);

List<int> lst = ints.OfType<int>(); // not working



답변

고통을 덜고 …

using System.Linq;

int[] ints = new [] { 10, 20, 10, 34, 113 };

List<int> lst = ints.OfType<int>().ToList(); // this isn't going to be fast.

그냥 …

List<int> lst = new List<int> { 10, 20, 10, 34, 113 };

또는…

List<int> lst = new List<int>();
lst.Add(10);
lst.Add(20);
lst.Add(10);
lst.Add(34);
lst.Add(113);

또는…

List<int> lst = new List<int>(new int[] { 10, 20, 10, 34, 113 });

또는…

var lst = new List<int>();
lst.AddRange(new int[] { 10, 20, 10, 34, 113 });


답변

작동하는 List의 생성자 오버로드도 있습니다 …하지만 강력한 형식의 배열이 필요할 것 같습니다.

//public List(IEnumerable<T> collection)
var intArray = new[] { 1, 2, 3, 4, 5 };
var list = new List<int>(intArray);

… 배열 클래스

var intArray = Array.CreateInstance(typeof(int), 5);
for (int i = 0; i < 5; i++)
    intArray.SetValue(i, i);
var list = new List<int>((int[])intArray);


답변

흥미롭게도 아무 대답 질문, 영업 이익은 강력한 형식의 사용하지 않는 int[]하지만를 Array.

당신은 Array실제로 그것이 무엇인지 캐스팅해야 하며 int[], 다음을 사용할 수 있습니다 ToList:

List<int> intList = ((int[])ints).ToList();

인수가 캐스트 될 수 있는지 (배열이 구현할 수 있는지) 먼저 확인 Enumerable.ToList하는 목록 생성자 를 호출 하면 시퀀스를 열거하는 대신 ICollection<T>보다 효율적인 ICollection<T>.CopyTo메소드 를 사용합니다 .


답변

가장 간단한 방법은 다음과 같습니다.

int[] ints = new [] { 10, 20, 10, 34, 113 };

List<int> lst = ints.ToList();

또는

List<int> lst = new List<int>();
lst.AddRange(ints);


답변

열거 형 배열을 목록으로 반환하려는 경우 다음을 수행 할 수 있습니다.

using System.Linq;

public List<DayOfWeek> DaysOfWeek
{
  get
  {
    return Enum.GetValues(typeof(DayOfWeek))
               .OfType<DayOfWeek>()
               .ToList();
  }
}


답변

기본적으로 다음과 같이 할 수 있습니다.

int[] ints = new[] { 10, 20, 10, 34, 113 };

이것은 배열이며 다음과 같이 새 목록을 호출 할 수 있습니다.

 var newList = new List<int>(ints);

복잡한 객체에 대해서도이 작업을 수행 할 수 있습니다.


답변

vb.net 에서이 작업을 수행하십시오.

mylist.addrange(intsArray)

또는

Dim mylist As New List(Of Integer)(intsArray)