我有一个字典,我想修改字典里面项目的属性,如何实现呢?我可以使用foreach来修改项目的属性吗?我调查了一些帖子,他们说从foreach获得的参考是只读的,不能修改。
class MyClass
{
public int propA { get; set; }
public string propB { get; set; }
}
class Foo
{
private Dictionary<int, List<MyClass>> mItemMap;
....
public void QueryAndModify() {
// My original thought, find what i want by foreach
foreach(KeyValuePair<int, List<MyClass>> kvp in mItemMap) {
foreach(MyClass item in kvp.Value) {
// Can I modify the propB of item by this way ?
if (item.propA == 3) {
item.propB = "I got you.";
}
}
}
}
}
答案 0 :(得分:1)
不,您可以就地修改项目。
答案 1 :(得分:0)
我相信你可以修改这些值,但不能从foreach循环中删除字典中的项目。
答案 2 :(得分:0)
您的词典是MyClass实例的REFERENCES的集合。修改实例的属性不会修改存储在字典中的引用。
在迭代集合时,您无法修改COLLECTION(添加,删除项目)。您可以修改集合中引用指向的实例。
我建议你在继续之前获得一本好的C#书并理解价值观和参考资料。
答案 3 :(得分:0)
罗伊说,你可以。
还要考虑重构代码:
public void QueryAndModify()
{
foreach( List<MyClass> list in mItemMap.Values )
{
...
}
}
HTH
马里奥