2009-12-17 13 views
6

ho lista di di GuidCome copiare List per Array

List<Guid> MyList; 

ho bisogno di copiare il suo contenuto di Array

Guid[] 

Si prega di raccomandare me una bella soluzione

+0

Un'altra domanda, MyClass { Valore guida; } Lista Come copiare la proprietà Guid nella matrice di Guid? Voglio dire non usare la frase di iterazione –

+1

Non sono al 100% su etichetta di SO, ma potrebbe essere meglio porre una nuova domanda come una nuova domanda. Potrei sbagliarmi. –

risposta

22

Come Luke detto in commenti, il particolare tipo List<T> ha già un metodo ToArray(). Ma se si sta utilizzando C# 3.0, è possibile sfruttare il metodo ToArray() estensione su qualsiasi IEnumerable esempio (che comprende IList, IList<T>, collezioni, altri array, ecc)

var myList = new List<Guid> {Guid.NewGuid(), Guid.NewGuid()}; 
Guid[] array = myList.ToArray(); // instance method 

IList<Guid> myList2 = new List<Guid> {Guid.NewGuid(), Guid.NewGuid()}; 
Guid[] array2 = myList2.ToArray(); // extension method 

var myList3 = new Collection<Guid> {Guid.NewGuid(), Guid.NewGuid()}; 
Guid[] array3 = myList3.ToArray(); // extension method 

quanto riguarda la tua seconda domanda:

È possibile utilizzare il metodo Select per eseguire la proiezione necessaria:

var list = new List<MyClass> {new MyClass(), new MyClass()}; 
Guid[] array = list.Select(mc => mc.value).ToArray(); 
+0

Muchas gracias. –

+5

'Elenco ' ha il proprio metodo (cioè non un'estensione) 'ToArray', disponibile da. NET2. (Esattamente la stessa sintassi di cui sopra, sebbene non sia possibile usare 'var' o object initialisers senza C# 3.) – LukeH

+0

@Luke: ottimo punto! Ho aggiornato la mia risposta di conseguenza. Grazie. –

10

Si dovrebbe semplicemente chiamare MyList.ToArray() per ottenere un array di elementi.

3

Utilizzando il Enumerable.ToArray() Extension Method si può fare:

var guidArray = MyList.ToArray(); 

Se si sta ancora utilizzando C# 2.0 è possibile utilizzare il metodo List.ToArray. La sintassi è la stessa (eccetto che non c'è la parola chiave var in C# 2.0).

5

Il nuovo modo (utilizzando le estensioni o il metodo ToArray() su liste generiche in Net 2.0):

Guid[] guidArray = MyList.ToArray(); 

Il vecchio modo:

Guid[] guidArray = new guidArray[MyList.Length]; 
int idx = 0; 
foreach (var guid in MyList) 
{ 
    guidArray[idx++] = guid; 
} 
+3

C# 2.0 ha 'List.ToArray', che usa' System.Array.Copy' –

+1

Immagino di mostrare la mia età. :-) – tvanfosson

4

Ancora un'altra opzione, oltre a Guid[] MyArray = MyList.ToArray():

Guid[] MyArray = new Guid[MyList.Count]; // or wherever you get your array from 
MyList.CopyTo(MyArray, 0); 

Questa soluzione potrebbe essere migliore se, per qualsiasi motivo, si dispone già di un properly- array di dimensioni e semplicemente vuole popolarlo (piuttosto che costruirne uno nuovo, come fa List<T>.ToArray()).

Problemi correlati