这是一个我总是经常回来的问题:
对于某些xyz情况(最常见的是绑定到<string, string>
),使用的最佳DropDownList
集合是什么?
有人为此准备了备忘单吗?各种选项之间的区别的完整列表?
答案 0 :(得分:5)
如果您绑定到下拉列表,您可能会考虑排序顺序,并且集合的大小(最有可能并且在大多数用例中)足够小以避免性能问题。在这些情况下,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));
}
}
编辑:正如Porges所指出的那样,在这个问题所解决的案例中,非通用结构的性能损失不是来自装箱和拆箱,但仍有性能损失,请参阅this article快速查看基准。
答案 1 :(得分:1)
以下是我对此的了解程度:
StringDictionary strDict = new StringDictionary();
// + Strong Type
// - lowercases the key
// - random order ?
// - older approach, .Net 1 which predates generics
Dictionary<string, string> dict = new Dictionary<string, string>();
// + Strong Type
// - random order ?
List<KeyValuePair<string, string>> listKVP = new List<KeyValuePair<string, string>>();
// + Strong Type
// + Keeps order as inserted
// - more complex to instanciate and use
Hashtable hash = new Hashtable();
// Automatically sorted by hash code
// Better for big collections
// - not strong typed
ListDictionary listDict = new ListDictionary();
// + faster than Hashtable for small collections (smaller than 10)
// - not strong typed
HybridDictionary hybridDict = new HybridDictionary();
// Better compromise if unsure of length of collection
// - not strong typed
OrderedDictionary orderDict = new OrderedDictionary();
// + Keeps order as inserted
// - not strong typed
SortedDictionary<string, string> sortedDict = new SortedDictionary<string, string>();
// + Strong Type
// Automatically sorted by key
// + faster lookup than the Dictionary [msdn]
SortedList<string, string> sortedList = new SortedList<string, string>();
// + Strong Type
// Automatically sorted by key
// Almost same as SortedDict, but can access by index []
KeyValuePair<string, string>[] arrayKVP = new KeyValuePair<string, string>[123];
// + Strong Type
// + Keeps order as inserted
// - Fixed size