添加到词典<;字符串,字符串>;使用foreach

本文关键字:字符串 gt foreach 使用 lt 添加 | 更新日期: 2023-09-27 18:25:54

在以下情况下,确保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)的顺序

添加到词典<;字符串,字符串>;使用foreach

只测试一下:

if(!Dict.ContainsKey(optionValue))
   Dict.Add(optionValue, optionKey)

根据您的变量名,看起来您的键和值颠倒了,但如果optionKey是您的查找键,它应该是:

Dict.Add(optionKey, optionValue);

粗略浏览MSDN文档可以发现,您可以使用显而易见的方法ContainsKey(string)来检查字典是否包含某个键。

在字典中,所有键都是唯一的。如果您想在向字典中添加条目时防止出现异常,请使用

if (!Dict.ContainsKey(optionKey)) {
  Dict.Add(optionKey, optionValue);
} else {
  Debug.Print("Key '"+optionKey+"' already exists");
}

取决于您希望如何处理重复项。

例如"最后一个获胜"

foreach(...)
{
    // Will overwrite an existing key
    Dict[optionValue] = optionKey;
}

"第一个获胜":

foreach(...)
{
    if (!Dict.ContainsKey(optionValue)) Dict.Add(optionValue, optionKey);
}
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

如果您只是担心异常,那么只需使用item属性:

Dict[optionValue]=optionKey;

MSDN:如果找不到指定的键,则get操作将抛出KeyNotFoundException,而set操作将使用指定的键创建一个新元素。

或者,如果你真的想检查,可以使用ContainsKey方法检查

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

其他人一直建议您只需测试密钥是否存在,如果存在则跳过添加。但是,这可能会导致数据丢失。您应该创建一个自定义类或类型,并将其与字典一起使用,如下所示:

公共词典<Guid,CustomObjectOrType>Dict=new词典<Guid,CustomObjectOrType>();

通过这种方式,您可以确保每个键都是唯一的(Guid),同时保留所有选项值和选项键。