Я устанавливаю свойство .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(...)
?
Примечание: Это не мой рабочий код, я просто упростил его для этого вопроса.