更新KeyValuePair,其中键不是int

时间:2011-10-28 11:50:07

标签: c#

我正在尝试对KeyValuePair进行更改,并从another post I found得到此代码:

var keysToModify = this.Properties
                    .Where(k => k.Key == propertyName)
                    .ToList();

                foreach (var key in keysToModify)
                {
                    this.Properties[key] = newValue;
                }

但是我的关键字段是字符串而不是int。在这种情况下,我需要做些什么才能更新KeyValuePair?

编辑:我的KeyValuePair是string,string类型,当我在上面的例子中运行代码时,我收到错误:

keyvaluepair不能分配给参数类型int

2 个答案:

答案 0 :(得分:0)

密钥在您的关联问题中也不是整数,它是Customer。 无论密钥类型是什么,您都应该能够使用相同的通用方法。 这是一个示例代码,例如当密钥是字符串时,另一个问题的接受答案:

// The ToList() call here is important, so that we evaluate all of the query
// *before* we start modifying the dictionary
var keysToModify = CustomerOrderDictionary.Keys
                                          .Where(k => k == "MyString")
                                          .ToList();
foreach (var key in keysToModify)
{
    CustomerOrderDictionary[key] = 4;
}

请注意,如果其他答案访问了Id键的Customer属性,则可以直接将键与目标字符串进行比较。

另外,请注意,如果您只是更新字典中的单个条目,则不需要循环,您可以直接执行此操作。如果你知道字典字典有一个带有给定键的条目,或者不介意创建一个新条目,那么只需使用:

CustomerOrderDictionary["MyString"] = 4;

或者,防止创建新条目:

if (CustomerOrderDicionary.ContainsKey("MyString"))
{
    CustomerOrderDictionary["MyString"] = 4;
}

答案 1 :(得分:0)

当密钥是字符串时,更新对的值没有特别的魔力 - 它大致相同,你只是使用一个字符串来访问一个值(这代表任何用作密钥的类型,省略任何可能的特点)。

但我能想到的唯一可能就是在这种情况下抛弃你的是循环。然而,循环是迭代实例,并且在这样做时没有暴露添加的“索引”,而是在这种情况下{em} 将是key