我有这个
foreach (KeyValuePair<string, Object> tempData in tempList.ToDictionary(x => x.Key, y => y.Value))
{
tempData["fahrzeugA"] = "s";
}
但使用tempData["fahrzeugA"] = "s";
无效。
我明白了:
无法将带有[]的索引应用于类型的表达式 &#39; System.Collections.Generic.KeyValuePair&#39;
如果我有一个现有的密钥fahrzeugA
,我想改变它的正确语法是什么?
答案 0 :(得分:2)
您可以申请:
var tempList = new List<Test>();
var dic = tempList.ToDictionary(x => x.Key, y => y.Value);
foreach (var tempData in dic)
{
dic[tempData.Key] = "s";
}
答案 1 :(得分:1)
您无法更改键值对,因为它是一个不可变的结构。更改它的唯一方法是创建一个新实例。该实例将独立于字典。
如果要更改字典中的值,请使用字典上的indexer属性更改值。
即使这样,字典也会立即超出范围,所以设置它是没有用的。它不会影响原始列表。
答案 2 :(得分:0)
如果您已成功将<div class="k-content k-state-active" id="RoleTabs-1" style="display: block; height: auto; overflow: auto; opacity: 1;" role="tabpanel" aria-expanded="true">
转换为字典,则只能有一个&#34; fahrzeugA&#34; (因为所有键必须是唯一的),所以循环没有意义。
你应该能够说:
tempList
如果您不想首先创建字典,可以这样做:
var dictionary = tempList.ToDictionary(x => x.Key, y => y.Value);
dictionary["fahrzeugA"] = "s";
如果您使用的是.NET var matchingKeyValuePair = tempList.SingleOrDefault(x => x.Key == "fahrzeugA");
if (matchingKeyValuePair != null) matchingKeyValuePair.Value = "s";
列表,它是一个不可变的结构,您可以使用新的KeyValuePair替换该值,如下所示:
KeyValuePair<TKey, TValue>
请注意,这假设您只有一个项目的键为&#34; fahrzeugA&#34;。
答案 3 :(得分:0)
如果您的tempList
是List<KeyValuePair<string, Object>>
类型:
for (var i = 0; i < tempList.Count; ++i) {
if (tempList[i].Key == "fahrzeugA") {
tempList[i] = new KeyValuePair<string, object> ("fahrzeugA", "s"); // KeyValuePair<string, object> might be changed with your own type if you use something else.
break; // If you want to modify only first KeyValuePair.
}
}
答案 4 :(得分:0)
ToDictionary
创建一个新对象。您无法通过访问其元素来更改原始对象。值。您必须从原始列表中删除此特定项目,然后添加相同密钥的新项目。
var removeIndex = tempList.FindIndex(kp => kp.Key == "fahrzeugA");
tempList.RemoveAt(removeIndex);
tempList.Add(new KeyValuePair<string, string>("fahrzeugA", "s"));
如果有多个&#34; fahrzeugA&#34;项目(它在列表中有效但在字典中无效),请改用RemoveAll
。