Frage Konvertierung von System.Array in Liste


Letzte Nacht hatte ich geträumt, dass das Folgende unmöglich war. Aber im selben Traum sagte jemand von SO mir etwas anderes. Daher würde ich gerne wissen, ob es möglich ist, zu konvertieren System.Array zu 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);

zu

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

195
2017-10-21 19:49


Ursprung


Antworten:


Sparen Sie sich etwas Schmerz ...

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.

Kann auch nur ...

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

oder...

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

oder...

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

oder...

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

325
2017-10-21 19:50



Es gibt auch eine Konstruktorüberladung für List, die funktionieren wird ... Aber ich denke, das würde ein stark typisiertes Array erfordern.

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

... für 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);

60
2017-10-21 20:05



Interessanterweise beantwortet niemand die Frage, OP verwendet keine stark typisierte int[] aber ein Array.

Du musst die Array zu dem, was es tatsächlich ist, ein int[], dann kannst du verwenden ToList:

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

Beachten Sie, dass Enumerable.ToList ruft die Listenkonstruktor Das prüft zuerst, ob das Argument angestellt werden kann ICollection<T>(was ein Array implementiert), dann wird es effizienter nutzen ICollection<T>.CopyTo Methode anstatt die Sequenz aufzuzählen.


37
2017-12-04 16:40



Die einfachste Methode ist:

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

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

oder

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

23
2018-02-04 07:01



in vb.net tun Sie das einfach

mylist.addrange(intsArray)

oder

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

4
2018-05-22 12:23



Wenn Sie ein Array von Listen als Liste zurückgeben möchten, können Sie Folgendes tun.

using System.Linq;

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

4
2018-04-05 09:06



Verwenden Sie einfach die vorhandene Methode .. .ToList ();

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

KUSS (HALTEN SIE ES EINFACH SIR)


2
2018-05-18 10:27