Dans notre application Delphi, nous utilisons une TStringList pour stocker les chaînes de caractères et les objets correspondants. Pour un autre projet, je dois faire quelque chose de similaire en C#, mais je ne suis pas sûr de la manière la plus efficace de le faire. Jusqu'à présent, j'ai pensé à utiliser un tableau, une liste ou un dictionnaire. L'une de ces méthodes serait-elle efficace pour réaliser ce que je veux faire ? Si non, quelle est la meilleure solution ?
Réponses
Trop de publicités?Cela dépend des fonctionnalités de TStringList dont vous avez besoin. Il n'y a pas vraiment de remplacement direct.
A dictionary<string,object>
n'est pas ordonnée, et vous ne pouvez pas avoir de chaînes en double. Il n'y a pas de propriété Text pour définir toutes les chaînes en même temps, etc. Si tout cela vous convient, j'opterais pour cette solution.
Sinon, vous pourriez envisager de définir une petite classe comme :
public class Item {
public string String {get;set;}
public object Object {get;set;}
}
et ensuite utiliser List<Item>
. Cela vous donne une liste ordonnée de tuples (string,object).
Si les chaînes de caractères sont uniques, optez pour l'option Dictionary<string, T>
. S'il n'est pas garanti qu'ils soient uniques, un dictionnaire ne sera pas approprié et vous voudrez peut-être utiliser une liste d'éléments d'information. Tuple<string, T>
(C# 4) ou peut-être une liste de KeyValuePair<string, T>
qui serait très similaire à un dictionnaire, sauf qu'il ne garantit évidemment pas l'unicité, et il préserve l'ordre là où un dictionnaire ne le ferait pas nécessairement.
Dictionary<string, T>> yourDictionary; // or
List<Tuple<string, T>> yourCollection; // or
List<KeyValuePair<string, T>> yourCollection;
Enfin, vous pouvez définir votre propre type d'encapsulation et créer une liste de que si vous ne souhaitez pas utiliser l'une des autres solutions.
Cet article de blog montre très bien les différences entre SortedList et Dictionary.
http://blog.bodurov.com/Performance-SortedList-SortedDictionary-Dictionary-Hashtable/
- Réponses précédentes
- Plus de réponses