我正在尝试使用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,建议从调试选项中选中使用托管兼容模式。但是,在我的情况下,此选项显示为灰色,因为我已经在假定的调试会话中。
答案 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()))));