C#:各种<string,string>集合之间的区别

bas*_*_79 13 c# string generics collections dictionary

这是一个我总是经常回来的问题:

什么是最好的<string, string>集合使用,对于一些xyz情况(最常见的是绑定到a DropDownList)?

有人为此准备了备忘单吗?各种选项之间的区别的完整列表?

mar*_*r75 5

如果您绑定到下拉列表,则可能会考虑排序顺序,并且集合的大小(最有可能并且在大多数用例中)足够小以避免性能问题.在这些情况下,a 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:正如Porges所指出的那样,在这个问题所解决的案例中,非通用结构的性能影响并非来自装箱和拆箱,但仍有性能损失,请参阅本文以获得快速基准测试.

  • 如果你正在使用字符串,或者特别是字符串特定的类,那么就没有拳击. (3认同)