2008-11-30 4 views
15

J'ai un objet de type ICollection<string>. Quelle est la meilleure façon de convertir en string[].ICollection <string> à la chaîne []

Comment cela peut-il être fait dans .NET 2?
Comment cela peut-il être nettoyé dans une version ultérieure de C#, peut-être en utilisant LINQ dans C# 3?

Répondre

29

Vous pouvez utiliser l'extrait suivant pour le convertir en un tableau ordinaire:

string[] array = new string[collection.Count]; 
collection.CopyTo(array, 0); 

Cela devrait faire le travail :)

+0

dois-je initialiser le tableau avec la bonne taille d'abord .. je ne peux pas faire cela: string [] futures = new string [] {}; FutureFVDictionary.Keys.CopyTo (futures, 0); ; – leora

+1

Le tableau doit d'abord être initialisé à la taille correcte - sinon CopyTo échouera avec une ArgumentException. – AdrianoKF

+0

avec la liste (mycoll) .ToArray() vous n'avez pas à vous soucier de la taille. – gimel

5

Dans le (trivial) cas de ICollection<String>, utilisez ToArray:

String[] GetArray(ICollection<String> mycoll) 
{ 
    return mycoll.ToArray<String>(); 
} 

EDIT: avec .Net 2.0, vous pouvez retourner le tableau avec un List<String> supplémentaire:

String[] GetArray(ICollection<String> mycoll) 
{ 
    List<String> result = new List<String>(mycoll); 
    return result.ToArray(); 
} 
+0

Le compilateur peut déduire l'argument de type, donc mycoll.ToArray() serait bien, sans avoir besoin de la partie . –

+0

La méthode de la liste .ToArray utilise une copie de tableau, donc faire la copie de tableau directement serait la meilleure option que de créer une liste, qui est un autre objet. –

+1

Liste (mycoll) .ToArray() extrait les détails de création et de copie du tableau. – gimel

8

Si vous utilisez C# 3.0 et .NET Framework 3.5, vous devriez être en mesure de le faire:

ICollection<string> col = new List<string>() { "a","b"}; 
string[] colArr = col.ToArray(); 

bien sûr, vous devez avoir "en utilisant System.Linq;" en haut du fichier

+0

Aussi la liste a une méthode ToArray depuis .NET 2.0, donc si vous utilisez la liste vous n'avez pas besoin de System.Linq –

+4

Il a demandé ICollection CVertex

+1

Ceci est la meilleure réponse à mon avis – reggaeguitar

Questions connexes