确保optionValue在以下方案中始终是唯一的最佳方法是什么?
public Dictionary<string, string> Dict = new Dictionary<string, string>();
foreach (string optionKey in i.options.Keys)
{
string optionValue = i.options.Values.ToString();
Dict.Add(optionKey, optionValue);
}
编辑:i.options包含密钥和值对。我需要确保为每个键将相应的值添加到字典
EDIT2 :更正了Dict.Add(optionKey,optionValue)的顺序
答案 0 :(得分:2)
试试吧:
if(!Dict.ContainsKey(optionValue))
Dict.Add(optionValue, optionKey)
根据您的变量名称,它看起来像你有关键和值反转,如果optionKey
是你的查找键,它应该是:
Dict.Add(optionKey, optionValue);
答案 1 :(得分:1)
在词典中,所有键都是唯一的。如果要在向词典添加条目时阻止异常,请使用
if (!Dict.ContainsKey(optionKey)) {
Dict.Add(optionKey, optionValue);
} else {
Debug.Print("Key '"+optionKey+"' already exists");
}
答案 2 :(得分:1)
粗略浏览MSDN文档后发现,您可以使用明显的方法ContainsKey(string)
来查看字典是否包含某个键。
答案 3 :(得分:0)
取决于您希望如何处理重复项。
例如“最后一个获胜”
foreach(...)
{
// Will overwrite an existing key
Dict[optionValue] = optionKey;
}
“第一个获胜”:
foreach(...)
{
if (!Dict.ContainsKey(optionValue)) Dict.Add(optionValue, optionKey);
}
答案 4 :(得分:0)
public Dictionary<string, string> Dict = new Dictionary<string, string>();
foreach (string optionKey in i.options.Keys)
{
string optionValue = i.options.Values.ToString();
if(!Dict.ContainsValue(optionValue))
Dict.Add(optionValue, optionKey);
}
请参阅 http://msdn.microsoft.com/en-us/library/kw5aaea4(v=vs.100).aspx
答案 5 :(得分:0)
其他人一直在建议你只是测试一下是否存在密钥,如果存在则跳过添加。但是,这可能会导致数据丢失。您应该创建一个自定义类或类型,并将其与您的字典一起使用,如下所示:
public Dictionary&lt; Guid,CustomObjectOrType&gt; Dict = new 字典&LT; Guid,CustomObjectOrType&gt;();
通过这种方式,您可以确保每个键都是唯一的(Guid),同时保留所有选项值和选项键。
答案 6 :(得分:0)
如果您只是担心异常,那么只需使用item属性:
Dict [optionValue] = optionKey;
MSDN:如果找不到指定的键,则get操作会抛出KeyNotFoundException,而set操作会创建一个具有指定键的新元素。
或者,如果您确实想要进行检查,请使用ContainsKey方法检查