![](/img/trans.png)
[英]c# xml -> dictionary <string, Tuple<string,string,string>> in Linq
[英]C# Update a Dictionary<string,string> with LINQ Query
我正在尝试更新存储在词典中的程序设置。 如果将它们存储在DatabaseContext中,那么奇怪的是,以下功能将起作用(我认为),但是由于它们位于Dictionary中,因此出现编译器错误。 为什么我的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;
而不是使用这个putSetting
方法来剥夺任何自然存在的意义。 我必须承认,我在代码审查期间看过很多东西 ,但这是赢家。
Value
是只读的是正确的,还应该考虑KeyValuePair
本身是一个结构 -因此查询后拥有的KeyValuePair
是一个新实例,而不是对Dictionary
实例的引用。
我有点困惑,为什么您要使用linq?
对于Dictionary<string,string>
您可以使用:
settings[setting] = value
该Value
一的KeyValuePair
始终是只读的。 注意脱皮
public TValue Value { get; }
采用
settings[setting] = value;
代替。 看到这么短,我不确定您通过这种方法真正获得了什么。
这种方法存在两个问题。
qry
的类型是KeyValuePair<TKey, TValue>
。 这是一个只读结构,这意味着您不能对其属性进行突变。 Dictionary<TKey, TValue>
中的结构的副本。 即使您可以对其进行突变,也不会更新Dictionary<TKey, TValue>
,因此不会产生任何影响 您在这里寻找的是Dictionary<TKey, TValue>
上的索引器Dictionary<TKey, TValue>
它允许为给定键插入值
settings[setting] = value;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.