实际上我需要像List<KeyValuePair<T, U>>这样的东西,但我希望能够像字典一样对其进行初始化(即无需每次都编写new KeyValuePair)。像这样:

Dictionary<string, string> dic = new Dictionary<string, string>
{
    { "key1", "value1"},
    { "key2", "value2"}
};

最佳答案

编辑:事实证明.NET确实已经有一个组合列表/字典类型: OrderedDictionary 。不幸的是,这是非通用类型的,因此在我看来,它的吸引力较小。但是,如果您只是反复调用Add,它将保留插入顺序。

这有点奇怪,因为调用Add不会影响键已经存在的条目,而使用索引器添加键/值对将覆盖以前的关联。基本上,它似乎并不是一个非常好的API,除非您的用例与它的行为完全匹配,否则我个人还是会避免使用它。

不,.NET没有任何保留插入顺序的字典。您始终可以使用相关的Add方法编写自己的基于列表的类型。这甚至可能是我考虑扩展现有类型的少数几个地方之一:

public class KeyValueList<TKey, TValue> : List<KeyValuePair<TKey, TValue>>
{
    public void Add(TKey key, TValue value)
    {
        Add(new KeyValuePair<TKey, TValue>(key, value));
    }
}

然后:
var list = new KeyValueList<string, string>
{
    { "key1", "value1"},
    { "key2", "value2"}
};

一种替代方法是使用合成,但是我的直觉是这是对继承的合理使用。在这种情况下,我无法说明为什么我会感到高兴,但请注意,通常情况下...

关于c# - 有没有更简单的方法来初始化List <KeyValuePair <T,U >>,例如Dictionary <T,U>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7387874/

10-10 01:57