Conversie van System.Array naar lijst

Vannacht heb ik gedroomd dat het volgende onmogelijk was. Maar in dezelfde droom vertelde iemand van SO me anders. Daarom zou ik graag willen weten of het mogelijk is om System.Arrayte converteren naar 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);

naar

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

Antwoord 1, autoriteit 100%

Bespaar jezelf wat pijn…

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.

Kan ook gewoon…

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

of…

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

of…

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

of…

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

Antwoord 2, autoriteit 20%

Er is ook een overbelasting van de constructor voor List die zal werken… Maar ik denk dat dit een sterk getypeerde array vereist.

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

… voor Array-klasse

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

Antwoord 3, autoriteit 16%

Interessant is dat niemand de vraag beantwoordt, OP gebruikt geen sterk getypte int[]maar een Array.

Je moet de Arraynaar wat het eigenlijk is, een int[], dan kun je ToListgebruiken:

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

Merk op dat Enumerable.ToListroept de lijstconstructoraan die eerst controleert als het argument kan worden gecast naar ICollection<T>(wat een array implementeert), dan zal het de efficiëntere ICollection<T>.CopyTo-methodein plaats van de reeks op te sommen.


Antwoord 4, autoriteit 6%

De eenvoudigste methode is:

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

of

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

Antwoord 5, Autoriteit 3%

In het geval dat u een array van ENUM’s als een lijst wilt retourneren, kunt u het volgende doen.

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

Antwoord 6

U kunt dit in principe doen:

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

Dit is uw array en dan kunt u uw nieuwe lijst als volgt bellen:

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

U kunt dit ook voor complex object doen.


Antwoord 7

in vb.net doe dit gewoon

mylist.addrange(intsArray)

of

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

Antwoord 8

U kunt het gewoon geven met uw code:

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;

Dan kunt u gewoon de anyvariabele als uw code gebruiken.


Antwoord 9

Gebruik gewoon de bestaande methode.. .ToList();

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

KUS(HOU HET EENVOUDIG HEER)


Antwoord 10

Ik ken twee methoden:

List<int> myList1 = new List<int>(myArray);

Of,

List<int> myList2 = myArray.ToList();

Ik ga ervan uit dat u op de hoogte bent van gegevenstypen en dat u de typen naar wens zult wijzigen.


Antwoord 11

Ik hoop dat dit nuttig is.

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

tekenreekswaarde ophalen

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

gehele waarde ophalen

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

Other episodes