Если вы привязываетесь к раскрывающемуся списку, вы, вероятно, имеете в виду порядок сортировки, и размер коллекции (скорее всего и в большинстве случаев использования) будет достаточно мал, чтобы избежать проблем с производительностью. В этих случаях List<KeyValuePair<string, string>>
является довольно простым выбором, хотя BindingList
может лучше работать для связывания, особенно в WPF.
Tuple<string, string>
может заменить KeyValuePair
даже.
Кроме того, неуниверсальные (не строго типизированные) коллекции часто дают наихудшую производительность при использовании бокса (помимо громоздкости в работе), и если вы беспокоитесь о накладных расходах списка, вы можете указать максимальный размер на создание, чтобы минимизировать это. Другое преимущество универсальных классов состоит в том, что они реализуют IEnumerable
для использования с Linq и, по моему опыту, имеют тенденцию быть более широко используемыми и более известными вашим коллегам. В общем, должен быть один очевидный способ сделать что-то на языке, и сообщество .Net выбрало Dictionary<string, string>
вместо StringDictionary
.
Вы также можете добавить методы расширения, чтобы сделать базовые списки более удобными:
public static class ListKeyValuePairExtensions
{
public static void Add<S, T>(this List<KeyValuePair<S, T>> list, S key, T value)
{
list.Add(new KeyValuePair<S, T>(key, value));
}
}
Редактировать: Как указывал Поргес, в случаях, рассматриваемых в этом вопросе, снижение производительности неуниверсальных структур происходит не из-за упаковки и распаковки, однако производительность по-прежнему снижается, см. эту статью для быстрого теста.