Как запустить цикл foreach в непосредственном окне Visual Studio? - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь записать значения в файл, используя Immediate Window в Visual Studio 2017.

У меня есть переменная с именем _myItems, которая имеет тип Dictionary<int, Dictionary<int, List<int>>>.

Я нажал breakpoint, где эта переменная находится в области видимости.Я могу запустить

?_myItems

в окне, и я получу список вроде:

Count = 9
    [0]: {[536], System.Collections.Generic.Dictionary`2[System.Int32,System.Collections.Generic.List`1[System.Int32]]]}
    [1]... omitted for clearance
    ...    omitted for clearance
    ...    omitted for clearance
    [8]... omitted for clearance

Чтобы убедиться, что я могу записать файл в непосредственном окне, я запустил:

File.WriteAllText("test.txt", "testing purposes");

Который записал файл, поэтому я уверен, что могу записать в файл оттуда.

Затем я попытался сделать следующее:

?(foreach (KeyValuePair<int, Dictionary<int, List<int>>> pair in _myItems) { foreach (KeyValuePair<int, List<int>> valuePair in pair.Value) { foreach (int numberToWrite in valuePair.Value) { File.AppendAllText("test.txt",numberToWrite.ToString()); } }})

Но я получаю следующую ошибку:

ошибка CS1525: Неверное выражение выражение 'foreach'

При поиске я наткнулся на этот вопрос ноВ принятом ответе только утверждается, что вы можете это сделать.

Как я могу запустить этот цикл foreach в Immediate Window, чтобы записать значения в файл.

Обратите внимание, что я знаю, что должен был сделать это внутри своего кода, ноЯ не думал, что мне понадобятся значения позже.Я просто проверял среднее.Когда я закончил использовать приложение, которое написал, я решил использовать эти значения.Поскольку время подготовки значений занимает часы и часы, невозможно просто остановить выполнение и переписать то, что мне нужно в моем коде, и снова пройти весь процесс.

Я также знаю, что яможно запустить

?_myItems[536][0] 

Затем скопировать значения вручную в файл.Этот процесс также займет много времени, так как есть много списков, и я хотел бы избежать этого.

Есть ли возможность заставить это работать в ближайшем окне?

Обновление :

Я сделал так, как предлагалось в ответах:

_myItems.Select(x => x.Value)
                    .ToList()
                    .ForEach(pair => pair
                                     .ToList()
                                     .ForEach(valuePair => valuePair
                                                           .Value
                                                           .ForEach(numberToWrite => File.AppendAllText("test.txt", numberToWrite.ToString()))))

Я получил следующую ошибку:

Оценка метода System.Collections.Generic.List`1 [System.Collections.Generic.Dictionary`2 [System.Int32, System.Collections.Generic.List`1 [System.Int32]]]. ForEach () вызывает в nativeМетод Microsoft.Win32.Win32Native.GetFullPathName ().Оценка собственных методов в этом контексте не поддерживается.

Я даже пытался просто Debug.Print мои значения, например, такие как:

_myItems.ToList().ForEach(pair => System.Diagnostics.Debug.Print(pair.Key));

И в итоге я получилта же ошибка выше.На этот раз с ошибкой вызова собственного метода:

System.Diagnostics.Debugger.IsLogging ()

Я искал эту ошибку и в соответствии с thisответ предлагается установить флажок Использовать управляемый режим совместимости в параметрах отладки.Однако в моем случае эта опция недоступна, так как я уже нахожусь в сеансе отладки, я полагаю.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Поскольку .ForEach не существует для типа Dictionary<TKey, TValue>, оно существует только для класса List<T>.

В качестве альтернативы вы можете выбрать значения словаря, преобразовать егов список и просмотрите каждое значение и запишите его в файл.

Добавление к Helio Santos Я хотел бы добавить:

_myItems.Select(x => x.Value).ToList().ForEach(pair => pair.ForEach(intList => intList.ForEach(numberToWrite => File.AppendAllText("test.txt", numberToWrite.ToString()))));
0 голосов
/ 16 ноября 2018

вы можете преобразовать вашу цепочку foreach в выражение linq:

_myItems.Select(x => x.Value).ToList().ForEach(pair => pair.ForEach(intList => intList.ForEach(numberToWrite => File.AppendAllText("test.txt", numberToWrite.ToString()))));
...