【问题标题】:Setting dictionary value from withn foreach loop从 foreach 循环中设置字典值
【发布时间】:2013-12-24 01:40:33
【问题描述】:

抱歉,如果这是重复的,但找不到任何符合我需要的东西。我有一个对象,其中一个成员是Dictionary对象,定义如下:

public class MyTestObject
{
    public int index { get; set; }
    // various other members here
    public Dictionary<string, bool> MyTestValues { get; set; }
}

我有一个班级列表MyTestObject

List<MyTestObject> values = new List<MyTestObject>();

我有一个遍历每个值实例的循环和一个遍历字典中 KVP 的子循环

foreach (MyTestObject current in values)
{
    foreach (KeyValuePair<string, bool> testCurrent in current.MyTestValues)
    {
    }
}

在第二个循环中,我需要更改每个 Dictionary 项目的布尔值,这就是我失败的地方。

理想情况下,我希望能够做类似以下的事情:

values[current.index].MyTestValues.Where(t => t.Key == testCurrent.Key).Single().Value = true;

即,它使用索引成员来访问对象中的字段并更新值。不幸的是,这不起作用,因为它说 Value 字段是只读的。

我确定我在这里不必要地感到困惑。任何建议表示赞赏

【问题讨论】:

  • 看来你可以直接使用values[current.index].MyTestValues[testCurrent.Key] = true,除非我有什么误解?
  • I am falling down。有什么问题?
  • @hamlet - 值字段是只读的。
  • @Andrew 不要尝试直接修改KeyValuePairs。通过索引器访问字典中的项目。
  • 您试图在无效的 foreach 中修改字典的内容?看到这个问题:stackoverflow.com/questions/2260446/…

标签: c#


【解决方案1】:

只要做:

values[current.index].MyTestValues[testCurrent.Key] = true;

它将更新现有值,如果 key 不存在,它将使用新键在字典中添加新项目。

【讨论】:

  • @Magus,在这种情况下最好使用ContainsKey检查密钥
  • 我的评论很愚蠢。你是对的。 ContainsKey 是最好的检查方式。
  • 嗯...我得到一个超出范围的索引,这没有多大意义。我会进一步检查,但我认为这是要走的路。
  • 忽略。我是个白痴,将 index 的值设置为 1 而不是 0 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2013-09-17
  • 1970-01-01
相关资源
最近更新 更多