实际上我需要像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/