我正在使用.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
任何人都可以向我解释为什么会这样发生吗?更重要的是,如何在不放弃.Where(...)
查询的情况下修复它?
注意: 这不是我的生产代码,我只是简化了这个问题。