Conversione di System.Array in List

La scorsa notte ho sognato che quanto segue fosse imansible. Ma nello stesso sogno, qualcuno di SO mi ha detto il contrario. Quindi vorrei sapere se è ansible convertire System.Array in 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); 

a

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

Risparmiavi un po ‘di dolore …

 using System.Linq; int[] ints = new [] { 10, 20, 10, 34, 113 }; List lst = ints.OfType().ToList(); // this isn't going to be fast. 

Può anche solo …

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

o…

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

o…

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

o…

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

C’è anche un overload di costruttore per List che funzionerà … Ma immagino che ciò richiederebbe un array tipizzato forte.

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

… per la class Array

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

È interessante notare che nessuno risponde alla domanda, OP non sta usando un int[] fortemente scritto int[] ma una Array .

Devi lanciare la Array su ciò che effettivamente è, un int[] , quindi puoi usare ToList :

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

Notare che Enumerable.ToList chiama il costruttore lista che prima controlla se l’argomento può essere lanciato su ICollection (che un array implementa), quindi userà il metodo ICollection.CopyTo più efficiente invece di enumerare la sequenza.

Il metodo più semplice è:

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

o

 List lst = new List(); lst.AddRange(ints); 

in vb.net basta fare questo

 mylist.addrange(intsArray) 

o

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

Nel caso in cui si desideri restituire una serie di enumerazioni come elenco, è ansible effettuare quanto segue.

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

Basta usare il metodo esistente .. .ToList ();

  List listArray = array.ToList(); 

KISS (TIENI SEMPLICE SIR)

Puoi fare come questo in pratica:

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

questo è il tuo array e tu puoi chiamare il tuo nuovo elenco in questo modo:

  var newList = new List(ints); 

Puoi farlo anche per oggetti complessi.

Puoi semplicemente provarlo con il tuo codice:

 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; 

Quindi puoi semplicemente usare anyVariable come codice.

Spero che questo sia utile.

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

ottieni il valore di stringa

 string enumValueString = "T1"; List stringValueList = typeof(TESTENUM).GetEnumValues().Cast().Select(m => Convert.ToString(m) ).ToList(); if(!stringValueList.Exists(m => m == enumValueString)) { throw new Exception("cannot find type"); } TESTENUM testEnumValueConvertString; Enum.TryParse(enumValueString, out testEnumValueConvertString); 

ottieni valore intero

  int enumValueInt = 1; List enumValueIntList = typeof(TESTENUM).GetEnumValues().Cast().Select(m => Convert.ToInt32(m) ).ToList(); if(!enumValueIntList.Exists(m => m == enumValueInt)) { throw new Exception("cannot find type"); } TESTENUM testEnumValueConvertInt; Enum.TryParse(enumValueString, out testEnumValueConvertInt);