C# 用LINQ查询更新字典

C# 用LINQ查询更新字典,c#,linq,C#,Linq,我正在尝试更新存储在字典中的程序设置。奇怪的是,如果它们存储在DatabaseContext中,我认为下面的函数可以工作,但是由于它们在字典中,我得到了一个编译器错误。为什么我的KeyValuePair.Value是只读的?更重要的是,如何重新编写以下函数以实际更新字典 谢谢 public void putSetting(Dictionary<string, string> settings, string setting, string value) { var qry = (

我正在尝试更新存储在字典中的程序设置。奇怪的是,如果它们存储在DatabaseContext中,我认为下面的函数可以工作,但是由于它们在字典中,我得到了一个编译器错误。为什么我的KeyValuePair.Value是只读的?更重要的是,如何重新编写以下函数以实际更新字典

谢谢

public void putSetting(Dictionary<string, string> settings, string setting, string value)
{
  var qry = (from s in settings
             where s.Key == setting
             select s).Single();
   qry.Value = value; // Error  1 Property or indexer 
                      // 'System.Collections.Generic.KeyValuePair<string,string>.Value'
                      // cannot be assigned to -- it is read only
}

老实说,我更愿意写以下内容:

settings[setting] = value;

而不是用这种被剥夺了任何自然存在感的方法。我必须承认,我在代码审查期间看到了很多东西,但这一个是赢家。

老实说,我更喜欢写以下内容:

settings[setting] = value;
而不是用这种被剥夺了任何自然存在感的方法。我必须承认,我在代码审查期间看到了很多东西,但这一个是赢家。

KeyValuePair的值始终是只读的。注意这一点

public TValue Value { get; }
使用

相反。看到它有多短,我不确定使用这种方法您真正获得了什么。

KeyValuePair的值始终是只读的。注意这一点

public TValue Value { get; }
使用


相反。看到它有多短,我不确定你用这个方法得到的是什么。

< P>不仅值是正确的,你也应该考虑KEYValuePoAIR本身是一个结构——所以你的查询之后的KEY值是一个新的实例,而不是字典中的一个引用。 我有点困惑为什么要用linq来做这个

对于字典,您可以使用:

 settings[setting] = value

不仅值是只读的是正确的,你也应该考虑KEYVALYPPEAIR本身是一个结构——所以你的查询之后的KEY ValuePoAIR是一个新的实例,而不是字典中的一个引用。 我有点困惑为什么要用linq来做这个

对于字典,您可以使用:

 settings[setting] = value

这种方法有几个问题

qry的类型是KeyValuePair。这是一个只读结构,这意味着你不能改变它的属性。 此外,因为它是一个结构,所以它是字典中结构的副本。即使您可以对其进行变异,它也不会更新字典中的值,因此不会产生效果 这里要查找的是字典上的索引器,它允许插入给定键的值

settings[setting] = value;

这种方法有几个问题

qry的类型是KeyValuePair。这是一个只读结构,这意味着你不能改变它的属性。 此外,因为它是一个结构,所以它是字典中结构的副本。即使您可以对其进行变异,它也不会更新字典中的值,因此不会产生效果 这里要查找的是字典上的索引器,它允许插入给定键的值

settings[setting] = value;

谢谢,你们是摇滚明星!谢谢,你们是摇滚明星!