如何缩短List <list <keyvaluepair <string,string =“”>&gt;&gt;?</list <keyvaluepair <string,>

时间:2009-08-25 17:48:34

标签: c# list types collections generics

我想在轻量级结构中存储键值对列表的列表。这看起来太麻烦了。什么更好? List&lt; Dictionary&lt; string,string&gt;&gt;增加很多开销?还有哪些其他选择?

5 个答案:

答案 0 :(得分:10)

考虑使用别名来缩写:

namespace Application
{
    using MyList = List<List<KeyValuePair<string, string>>>;

    public class Sample
    {
        void Foo()
        {
            var list = new MyList();
        }
    }
}

答案 1 :(得分:3)

ListDictionary都非常有效,所以我不会再考虑使用它们。 (除非你要在你的列表中存储大量的词典,但这并不常见。)

如果您认为List<Dictionary<string, string>>输入太多,可以在序言中说明

using LoDSS = System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, string>>;

请注意,这只是一个别名,不需要子类化。

答案 2 :(得分:2)

词典&LT; string,string&gt;和列表&lt; KeyValuePair&LT; string,string&gt;&gt;可能都很好,取决于你想要传递的数据。此外,如果您打算在整个地方使用相同的长类型,您可以在其他地方为速记定义类型。像这样:

public class MyShorthand : List<List<KeyValuePair<string, string>>> { }

或者您可以使用using语句来定义类似的别名:

using MyShorthand = System.Collections.Generic.List<System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, string>>>;

答案 3 :(得分:0)

如果您通过密钥访问值,请使用字典,这就是我的意思。为了减少字典的开销,请尝试给它们一个初始容量。

或者(如果两个列表都相当小),您可以实现一个自定义哈希对象,类似这样(除了更漂亮):

public class MyDictionary
{
    private Dictionary<string, string> values;

    public MyDictionary()
    {
        values = new Dictionary<string, string>();
    }

    public void Add(int index, string key, string value)
    {
        int hash = ((0xFFFF) & index) * (0xFFFF) + (0xFFFF) & key.GetHashCode();
        values.Add(hash, value);
    }
    public string Get(int index, string key)
    {
        int hash = ((0xFFFF) & index) * (0xFFFF) + (0xFFFF) & key.GetHashCode();
        return values[hash];
    }
}

答案 4 :(得分:0)

为了清楚起见,我会将您的KeyValuePair<string, string>换成更短的内容,例如StringPair并定义StringPair列表的简写。这将缩短您的语法并提高可读性恕我直言。

public class StringPair : KeyValuePair<string, string> { }

public class StringPairList : List<stringPair> { }

..


var jaggedList = new List<StringPairList>();