2013-02-06 2 views
1

Je suis en train de développer un projet en .NET, en utilisant malheureusement l'ancien .NET 2.0 framework (en raison de la difficulté de mise à jour de nombreux clients, valider une version plus récente du framework à installer sur plusieurs ordinateurs , etc...).Alternative pour les collections dans .NET Framework 2.0

J'ai vu que la majorité des classes de collection proviennent du framework .NET 4. Que recommanderiez-vous d'utiliser si j'ai besoin de Sets et Maps mais que j'aurais besoin d'utiliser .NET 2.0 framework? Dois-je implémenter à partir de zéro chaque collection que je voudrais utiliser?

Existe-t-il plus de collections en dehors de l'espace de noms System.Collections.Generic que je ne connais pas? (Référence ici:

http://msdn.microsoft.com/en-us/library/system.collections.generic%28v=vs.80%29.aspx)

Je crois que la meilleure décision serait de convaincre les gens nécessaires pour mettre à jour tous les clients à 4,5 NET Framework parce que cela apportera plus de possibilités de développement, et cette version apporterait beaucoup améliorations Mais je ne suis pas sûr que je serai en mesure de changer cela. Alors que feriez-vous dans ma position?

Merci d'avoir lu. Cordialement.

+3

Je dois vous avoir mal compris. Si vous voulez "Maps" dans .NET 2.0 il y a le [Dictionary ] (http://msdn.microsoft.com/en-US/library/xfhwa508%28v=vs.80%29.aspx) classe. En ce qui concerne les ensembles, vous pouvez utiliser 'Dictionary ' puisque vous n'avez malheureusement pas 'HashSet ' dans .NET 2.0 (pour autant que je sache). –

+0

4.5 n'est pas supporté sur Windows XP, mais 4.0 est. La différence entre 2.0 et 4.0 est énorme. Je vous suggère de penser à la possibilité d'utiliser 4.0 –

+0

De quelles collections * spécifiques * avez-vous besoin? – Servy

Répondre

3

List<T> et Dictionary<TKey, TValue> sont disponibles dans .NET 2.0. Donc, comme la plupart des autres collections génériques. Au lieu de HashSet<T>, vous pouvez utiliser un dictionnaire générique. De plus, vous n'avez pas besoin de l'implémenter à partir de zéro. Vous pouvez déléguer la plupart des fonctionnalités au dictionnaire. Par exemple.

public class HashSet<T> : IEnumerable<T> 
{ 
    private Dictionary<T, object> _dictionary = new Dictionary<T, object>(); 

    public void Add(T value) 
    { 
     if (!_dictionary.ContainsKey(value)) 
      _dictionary.Add(value, null); 
    } 

    public void Remove(T value) 
    { 
     _dictionary.Remove(value); 
    } 

    public void Clear() 
    { 
     _dictionary.Clear(); 
    } 

    public int Count 
    { 
     get { return _dictionary.Count; } 
    } 

    public IEnumerator<T> GetEnumerator() 
    { 
     return _dictionary.Keys.GetEnumerator(); 
    } 

    // ... 
} 
+1

Très clair. Je vous remercie ! – pablof

8

J'ai vu que la majorité des classes de collection sont du cadre .NET 4.

Ce n'est tout simplement pas vrai. L'espace de noms System.Collections.Concurrent est entré en jeu dans .NET 4, mais la plupart des collections génériques est arrivé dans .NET 2.

.NET 3.5 n'avaient quelques nouvelles - je soupçonne que le plus important étant HashSet<T>.

Le plus souvent collections utilisées (en dehors des tableaux) sont probablement:

  • List<T>
  • Dictionary<TKey, TValue>
  • LinkedList<T>
  • Queue<T>
  • Stack<T>

... avec les deux premiers étant façon plus largement utilisé que les trois derniers. Tous ces éléments étaient dans .NET 2.

L'autre différence importante à prendre en compte est LINQ: .NET 3.5 introduit LINQ, mais vous pouvez utiliser une implémentation alternative de LINQ aux objets (par exemple LINQBridge) contre .NET 2.0. Cela fonctionne bien si vous disposez d'une version moderne de Visual Studio, ce qui vous permet d'utiliser des fonctionnalités langue à partir de C# 3 et plus, même lorsque vous ciblez .NET 2.

+0

Merci d'avoir répondu. Vous avez raison, ce n'est pas la majorité des classes de collection. Je cherchais principalement des implémentations Set. C'est pourquoi j'ai senti qu'il y avait quelque chose d'important dans la version 2.0 (HashSet et SortedSet). Peut-être que les Sets sont la seule collection qui me manquera dans la 2.0 (mais c'était celle dont j'avais besoin en premier). Bien que mon problème avec les cartes pourrait être couvert avec Dictionary. Merci. – pablof

+0

@pablof: Si vous vouliez des ensembles, vous auriez dû le dire dans votre question. S'il vous plaît soyez plus précis à l'avenir. –

+0

Oui, désolé, j'aurais dû être plus précis. Merci pour votre temps. Votre réponse a été très utile aussi:) Seuls les ensembles étaient les seuls que .NET 2 n'avait pas, et je vais aussi essayer LINQBridge. – pablof

Questions connexes