如何将列表中KeyValuePair的值更改为字典中的值?

时间:2018-10-25 10:30:43

标签: c# .net list dictionary keyvaluepair

我的案子很复杂。我想在此字典中更改KeyVluePair的值-> Dictionary<string, List<KeyValuePair<string, int>>>

到目前为止,我已经做到了,但是我不知道如何继续:

string input = Console.ReadLine();
Dictionary<string, List<KeyValuePair<string, int>>> dworfs = new Dictionary<string, List<KeyValuePair<string, int>>>();
while (input != "Once upon a time")
{
   string[] elements = input.Split(new[] { " <:> " }, StringSplitOptions.RemoveEmptyEntries);
   if (dworfs.ContainsKey(elements[0]))
   {
      if (dworfs[elements[0]].Any(x => x.Key.Contains(elements[1])))
      {
         var dworf = dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]);
         if (dworf.Value < int.Parse(elements[2]))
         {
            dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]) = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));
         }
      }
      else
      {
         dworfs[elements[0]].Add(new KeyValuePair<string, int>(elements[1], int.Parse(elements[2])));
      }
   }
   else
   {
      dworfs.Add(elements[0], new List<KeyValuePair<string, int>> { new KeyValuePair<string, int> (elements[1], int.Parse(elements[2])) });
   }
   input = Console.ReadLine();
}

此行dworfs[elements[0]].FirstOrDefault(x => x.Key == elements[1]) = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));给我一个错误分配的左侧必须是变量,属性或索引器。我不知道如何分配值。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

错误消息描述了问题,FirstOrDefault()将返回一个值,该值只能用作表达式的右侧。您不能为方法结果分配值。

尝试一下:

var index = dworfs[elements[0]].IndexOf(dworf);
dworfs[elements[0]][index] = new KeyValuePair<string,int> (elements[1], int.Parse(elements[2]));

请记住,FirstOrDefault()可能返回null,但是您没有在代码中检查这种情况,这可能导致NullReferenceException

答案 1 :(得分:1)

如果KeyValuePairDictionary,您将有更多机会。

但是

var dwarf = dworfs[elements[0]];
var obj = dwarf.FirstOrDefault(x => x.Key == elements[1]);
var index = dwarf.IndexOf(obj);

dwarf[index] = new KeyValuePair<string, int>(elements[1], int.Parse(elements[2]));

提示,您无需一站式完成所有操作