在foreach循环中使用Where查询的奇怪行为

时间:2018-05-16 21:20:10

标签: c# winforms linq for-loop

我正在使用.Tag查询设置ToolStripItem循环内创建的foreach .Where(...)属性以获取值。第一项的.Tag属性在循环的第一次迭代中是正确的,但在第二次迭代中,第一项的值已更改,就像我使用了第二次迭代中的文本一样。我确定我的解释很糟糕,所以让我们跳到这个例子:

var contextMenu = new ContextMenuStrip();
var values = new Dictionary<string,string[]>();

values.Add("Item1", new string[] { "Item1: Value1", "Item1: Value2", 
    "Item2: This should not end up in the Tag property" });
values.Add("Item2", new string[] { "Item2: Value1", "Item2: Value2" });

foreach (var text in values.Keys)
{
    var item = contextMenu.Items.Add(text);
    item.Tag = values[text].Where(x => x.Contains(text));
} // Set a break point here

第一次中断: enter image description here

第二次中断: enter image description here

任何人都可以向我解释为什么会这样发生吗?更重要的是,如何在不放弃.Where(...)查询的情况下修复它?

注意: 这不是我的生产代码,我只是简化了这个问题。

0 个答案:

没有答案