如何在Visual Studio的即时窗口中运行foreach循环?

时间:2018-11-16 13:48:53

标签: c# foreach visual-studio-2017 immediate-window

我正在尝试使用Visual Studio 2017中的Immediate Window将值写入文件。

我有一个名为_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'

通过搜索,我遇到了this question,但被接受的答案仅表明您可以做到。

如何在即时窗口中运行此foreach循环以将值写入文件。

请注意,我知道应该在代码中完成此操作,但是我认为以后不需要这些值。我只是检查平均值。使用完我编写的应用程序后,我决定使用这些值。鉴于准备值的时间需要花费数小时和数小时,因此无法停止执行并重新编写代码中需要的内容,然后再次执行整个过程。

我也知道我可以跑步

?_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()的求值调用本机方法Microsoft.Win32.Win32Native.GetFullPathName()。在这种情况下,不支持对本机方法进行评估。

我什至试图Debug.Print我的价值观,例如:

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

最后我遇到了同样的错误。这次出现了调用本地方法的错误:

  

System.Diagnostics.Debugger.IsLogging()

我搜索了此错误,并且根据this answer,建议从调试选项中选中使用托管兼容模式。但是,在我的情况下,此选项显示为灰色,因为我已经在假定的调试会话中。

2 个答案:

答案 0 :(得分:0)

您可以将foreach链转换为linq表达式:

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

答案 1 :(得分:0)

由于Dictionary<TKey, TValue>类型不存在.ForEach,因此它仅存在于List<T>类中。

或者,您可以选择字典的值,将其转换为列表,然后遍历每个值并将其写入文件。

添加到Helio Santos中,我想添加:

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