我需要将键/对象对添加到字典中,但是我当然需要首先检查键是否已经存在,否则我会得到一个"key already in dictionary“错误。下面的代码解决了这个问题,但是很笨拙。
没有像这样创建字符串助手方法的更优雅的方法是什么?
using System;
using System.Collections.Generic;
namespace TestDictStringObject
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, object> currentViews = new Dictionary<string, object>();
StringHelpers.SafeDictionaryAdd(currentViews, "Customers", "view1");
StringHelpers.SafeDictionaryAdd(currentViews, "Customers", "view2");
StringHelpers.SafeDictionaryAdd(currentViews, "Employees", "view1");
StringHelpers.SafeDictionaryAdd(currentViews, "Reports", "view1");
foreach (KeyValuePair<string, object> pair in currentViews)
{
Console.WriteLine("{0} {1}", pair.Key, pair.Value);
}
Console.ReadLine();
}
}
public static class StringHelpers
{
public static void SafeDictionaryAdd(Dictionary<string, object> dict, string key, object view)
{
if (!dict.ContainsKey(key))
{
dict.Add(key, view);
}
else
{
dict[key] = view;
}
}
}
}
发布于 2009-07-24 13:10:07
只需使用索引器-如果它已经在那里,它将被覆盖,但它不一定首先在那里:
Dictionary<string, object> currentViews = new Dictionary<string, object>();
currentViews["Customers"] = "view1";
currentViews["Customers"] = "view2";
currentViews["Employees"] = "view1";
currentViews["Reports"] = "view1";
基本上,如果键的存在表明存在错误(因此您希望它抛出),则使用Add
,否则使用索引器。(这有点像强制转换和使用as
进行引用转换之间的区别。)
如果你使用的是C# 3,并且你有一组不同的密钥,你可以让它更整洁:
var currentViews = new Dictionary<string, object>()
{
{ "Customers", "view2" },
{ "Employees", "view1" },
{ "Reports", "view1" },
};
这在你的例子中是行不通的,因为集合初始化器总是使用在第二个Customers
条目上抛出的Add
。
发布于 2009-07-24 13:09:55
怎么了.
dict[key] = view;
如果密钥不存在,它会自动添加密钥。
发布于 2009-07-24 13:11:10
简单地说
dict[key] = view;
来自Dictionary.Item的MSDN文档
与指定键关联的值。如果未找到指定的键,则get操作将抛出KeyNotFoundException,而set操作将使用指定的键创建一个新元素。
我的重点
https://stackoverflow.com/questions/1177517
复制相似问题