2009-12-17 8 views
6

Je liste des Guid deComment copier Liste to Array

List<Guid> MyList; 

Je dois copier son contenu tableau

Guid[] 

S'il vous plaît me recommander une solution assez

+0

Une autre question, MyClass { Valeur de guidage; } Liste Comment copier la propriété Guid au tableau de Guid? Je ne veux pas utiliser l'instruction d'itération –

+1

Je ne suis pas à 100% sur l'étiquette de SO, mais il pourrait être préférable de poser une nouvelle question comme nouvelle question. Je peux me tromper. –

Répondre

22

Comme Luke dit dans commentaires, le type particulier List<T> a déjà une méthode ToArray(). Mais si vous utilisez C# 3.0, vous pouvez tirer parti de la méthode d'extension ToArray() sur une instance IEnumerable (qui comprend IList, IList<T>, collections, d'autres tableaux, etc.)

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 

En ce qui concerne votre deuxième question:

Vous pouvez utiliser la méthode Select pour effectuer la projection nécessaire:

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

Muchas gracias. –

+5

'Liste ' a sa propre méthode (c'est-à-dire, pas une extension) 'ToArray', disponible depuis .NET2. (Exactement la même syntaxe que ci-dessus, bien que vous ne seriez pas capable d'utiliser 'var' ou les initialiseurs d'objet sans C# 3.) – LukeH

+0

@Luke: Très bon point! J'ai mis à jour ma réponse en conséquence. Merci. –

10

Vous devriez juste avoir à appeler MyList.ToArray() pour obtenir un tableau des éléments.

3

Utilisation du Enumerable.ToArray() Extension Method vous pouvez faire:

var guidArray = MyList.ToArray(); 

Si vous utilisez encore C# 2.0, vous pouvez utiliser la méthode List.ToArray. La syntaxe est la même (sauf qu'il n'y a pas de mot-clé var dans C# 2.0).

5

La nouvelle façon (en utilisant des extensions ou la méthode ToArray() sur les listes génériques en .Net 2.0):

Guid[] guidArray = MyList.ToArray(); 

L'ancienne:

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

C# 2.0 a 'List.ToArray', qui utilise' System.Array.Copy' –

+1

Je suppose que je montre mon âge. :-) – tvanfosson

4

Une autre option, en plus Guid[] MyArray = MyList.ToArray():

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

Cette solution pourrait être mieux si, pour une raison quelconque, vous avez déjà un properly- taille tableau et simplement vouloir le peupler (plutôt que de construire un nouveau, comme le fait List<T>.ToArray()).