Преобразование 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

Ответ 1

Спасите себя от боли...

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

Ответ 2

Существует также перегрузка конструктора для List, которая будет работать... Но я предполагаю, что для этого потребовался бы сильный типизированный массив.

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

... для класса Array

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

Ответ 3

Интересно, что никто не отвечает на вопрос, OP не использует строго типизированный int[], а Array.

Вы должны направить Array на то, что это на самом деле, int[], затем вы можете использовать ToList:

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

Обратите внимание, что Enumerable.ToList вызывает конструктор списка что сначала проверяется, может ли аргумент быть добавлен к ICollection<T> (который реализует массив), тогда он будет использовать более эффективный метод ICollection<T>.CopyTo вместо перечисления последовательности.

Ответ 4

Самый простой способ:

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

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

или

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

Ответ 5

в vb.net просто сделайте это

mylist.addrange(intsArray)

или

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

Ответ 6

В случае, если вы хотите вернуть массив перечислений в виде списка, вы можете сделать следующее.

using System.Linq;

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

Ответ 7

Просто используйте существующий метод...ToList();

   List<int> listArray = array.ToList();

KISS (ХРАНИТЕ ЕГО ПРОСТОЙ SIR)

Ответ 8

Вы можете просто попросить свой код:

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

int[] anyVariable=(int[])ints;

Тогда вы можете просто использовать anyVariable в качестве своего кода.

Ответ 9

Я надеюсь, что это будет полезно.

enum TESTENUM
    {
        T1 = 0,
        T2 = 1,
        T3 = 2,
        T4 = 3
    }

получить строковое значение

string enumValueString = "T1";

        List<string> stringValueList =  typeof(TESTENUM).GetEnumValues().Cast<object>().Select(m => 
            Convert.ToString(m)
            ).ToList();

        if(!stringValueList.Exists(m => m == enumValueString))
        {
            throw new Exception("cannot find type");
        }

        TESTENUM testEnumValueConvertString;
        Enum.TryParse<TESTENUM>(enumValueString, out testEnumValueConvertString);

получить целочисленное значение

        int enumValueInt = 1;

        List<int> enumValueIntList =  typeof(TESTENUM).GetEnumValues().Cast<object>().Select(m =>
            Convert.ToInt32(m)
            ).ToList();

        if(!enumValueIntList.Exists(m => m == enumValueInt))
        {
            throw new Exception("cannot find type");
        }

        TESTENUM testEnumValueConvertInt;
        Enum.TryParse<TESTENUM>(enumValueString, out testEnumValueConvertInt);

Ответ 10

Вы можете сделать это в основном:

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

это ваш массив, и вы можете назвать свой новый список следующим:

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

Вы можете сделать это и для сложного объекта.