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