Is there a more elegant way of adding an item to a Dictionary<> safely?

后端 未结 5 768
梦如初夏
梦如初夏 2020-12-13 16:37

I need to add key/object pairs to a dictionary, but I of course need to first check if the key already exists otherwise I get a \"key already exists in dictionary

5条回答
  •  -上瘾入骨i
    2020-12-13 17:19

    Just use the indexer - it will overwrite if it's already there, but it doesn't have to be there first:

    Dictionary currentViews = new Dictionary();
    currentViews["Customers"] = "view1";
    currentViews["Customers"] = "view2";
    currentViews["Employees"] = "view1";
    currentViews["Reports"] = "view1";
    

    Basically use Add if the existence of the key indicates a bug (so you want it to throw) and the indexer otherwise. (It's a bit like the difference between casting and using as for reference conversions.)

    If you're using C# 3 and you have a distinct set of keys, you can make this even neater:

    var currentViews = new Dictionary()
    {
        { "Customers", "view2" },
        { "Employees", "view1" },
        { "Reports", "view1" },
    };
    

    That won't work in your case though, as collection initializers always use Add which will throw on the second Customers entry.

提交回复
热议问题