Странное поведение запроса Where, используемого в цикле foreach - PullRequest
0 голосов
/ 17 мая 2018

Я устанавливаю свойство .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(...)?

Примечание: Это не мой рабочий код, я просто упростил его для этого вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...