如何解决替换Dictionary值时出现的CS0200只读属性错误?
问题解决方法
原代码错误分析
- 内层
foreach遍历的键值对entry是只读迭代变量,无法直接修改其Value属性。 - 错误地将
key.Value(类型为Dictionary<string, string>)赋值为字符串,类型不匹配,这也是触发CS0200错误的核心原因之一。
正确实现方式
方式一:修改原有内层字典的值
通过遍历内层字典的键(需转成列表避免集合修改异常),直接通过键更新对应值:
if (translationDictionary == null) return; foreach (var outerEntry in translationDictionary) { var innerDict = outerEntry.Value; // 转成List避免遍历原Keys集合时修改字典引发异常 foreach (var innerKey in innerDict.Keys.ToList()) { var replaceString = new string('*', innerDict[innerKey].Length); innerDict[innerKey] = replaceString; } }
方式二:生成新内层字典替换原有
如果希望保留原内层字典不被修改,可以生成新的内层字典替换外层字典中的对应项:
if (translationDictionary == null) return; foreach (var outerKey in translationDictionary.Keys.ToList()) { var originalInner = translationDictionary[outerKey]; var newInner = originalInner.ToDictionary( kvp => kvp.Key, kvp => new string('*', kvp.Value.Length) ); translationDictionary[outerKey] = newInner; }
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

