加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 是否有一种更简单的方法来初始化List>,就像字典一样?

发布时间:2020-12-15 08:35:50 所属栏目:百科 来源:网络整理
导读:实际上我需要像List KeyValuePair T,U这样的东西.但我希望能够像字典一样初始化它(即每次都不写新的KeyValuePair).像这样: Dictionarystring,string dic = new Dictionarystring,string{ { "key1","value1"},{ "key2","value2"}}; 解决方法 编辑:事实证明.
实际上我需要像List< KeyValuePair< T,U>>这样的东西.但我希望能够像字典一样初始化它(即每次都不写新的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,"value2"}
};

另一种方法是使用合成,但我的直觉是这是合理使用继承.我不能说为什么我在这种情况下很开心,但通常不会,请注意……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读