我正在尝试使用Visual Studio 2017中的立即窗口
将值写入文件。
我有一个名为_myItems
的变量,它是Dictionary<int,Dictionary<int,List<int>>>
类型。
我遇到了一个断点
,在这个变量的作用域内。我可以运行
?_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()); } }})
但我遇到了以下错误:error CS1525: Invalid expression term 'foreach'
通过搜索,我找到了这个问题,但是被接受的答案只说明您可以这样做。
如何在即时窗口中运行此 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()
我搜索了这个错误,并根据这篇答案,建议从调试选项中勾选使用托管兼容模式。然而,在我的情况下,由于我已经处于调试会话中,所以此选项被禁用。