更改/修改现有keyValuePair中的数据

时间:2016-04-27 06:06:42

标签: c# linq generics

我有这个

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,我想改变它的正确语法是什么?

5 个答案:

答案 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)

如果您的tempListList<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)

  1. 检查KeyValuePair.Value Property。它是只读的,不能改变。
  2. ToDictionary创建一个新对象。您无法通过访问其元素来更改原始对象。值。
  3. 您必须从原始列表中删除此特定项目,然后添加相同密钥的新项目。

    var removeIndex = tempList.FindIndex(kp => kp.Key == "fahrzeugA");
    tempList.RemoveAt(removeIndex);
    tempList.Add(new KeyValuePair<string, string>("fahrzeugA", "s"));
    

    如果有多个&#34; fahrzeugA&#34;项目(它在列表中有效但在字典中无效),请改用RemoveAll