Convertir StringCollection de List<String>
Normalement, je choisirais List<String>
[ou, en VB, List(Of String)
] sur StringCollection
chaque fois que possible: voir aussi Meilleure chaîne de conteneur.
Cependant, comme il semble, de génériques et, par conséquent, List<String>
— sont apparemment pas pris en charge dans VS 2008 les paramètres de concepteur. Donc, si je veux utiliser une liste de chaînes dans mes paramètres de l'utilisateur, j'ai du avoir recours à l'aide d'un StringCollection
là.
Maintenant que je ne veux pas voir StringCollection
tout au long de mon code, j'ai besoin de les convertir à List<String>
. Comment puis-je le faire efficacement? Ou, mieux encore, suis-je dans l'erreur et il y a un moyen d'utiliser List<String>
dans les paramètres de designer?
EDIT: j'ai à utiliser .NET 2.0.
Vous devez vous connecter pour publier un commentaire.
Si vous ont à utiliser .NET 2.0, j'imagine que le cleanliest option serait de créer un wrapper pour
StringCollection
qui implémenteIEnumerable<string>
etIEnumerator<string>
pourStringCollection
etStringEnumerator
respectivement. (note: selon les métadonnées,StringEnumerator
ne pas mettre en œuvreIEnumerator
). L'échantillon ci-dessous. Cependant, à la fin de la journée, quelqu'un, quelque part va faire unforeach()
sur leStringCollection
, donc on pourrait valoir qu'un simpleforeach(string item in stringCollection)
et en ajoutant à laList<string>
suffirait; je doute que cela ne serait pas performat suffisant pour vos besoins.Vous pourriez également mettre en œuvre
IList<string>
à l'aide de cette approche ainsi, vous éviter de dupliquer les sous-jacents des chaînes, mais vous aurez à payer une pénalité d'avoir le "wrapper" type de déléguer des appels (un de plus un appel de méthode sur la pile!). Je vous suggère de traiter les choses en termes d'interfaces au sein de votre système de toute façonIEnumberable<string>
,IList<string>
etc, plutôt que sur le béton de la Liste, il vous guide sur le chemin à une plus grande flexibilité.Conversion
StringCollection
àList<string>
est merveilleusement simple si vous êtes en utilisant .NET 3.5.Concernant votre deuxième question, j'ai l'air de se rappeler qu'il est possible d'utiliser
List<string>
dans les paramètres designer de Visual Studio. Si vous sélectionnez personnalisé, tapez le navigateur de l'idéal type, il devrait fonctionner. Cependant, je ne pouvais être trompé sur ça, donc je vais avoir besoin de le vérifier.stringCollection.Cast<string>().ToList()
Pourquoi ne pas faire simple et juste itération, bien que cela et ajouter les éléments à la liste, ou ai-je mal compris quelque chose?
Si vous êtes à l'aide de C# 3.0 et .NET 3.5, vous pouvez créer une liste à l'aide de
Dans l'autre sens est :
C# 2.0