I am trying to write values to a file using the Immediate Window
in Visual Studio 2017.
I've got a variable called _myItems
which is of type Dictionary<int, Dictionary<int, List<int>>>
.
I did hit a breakpoint
where this variable is in scope. I can run
?_myItems
in the window, and I'll get a list like:
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
To make sure that I can write a file in the immediate window, I ran:
File.WriteAllText("test.txt", "testing purposes");
Which did write the file, therefore I am sure I can write to a file from there.
I then tried the following:
?(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()); } }})
But I am getting the following error:
error CS1525: Invalid expression term 'foreach'
By searching around I came across this question but the accepted answer only state that you can do it.
How can I run this foreach
loop in the Immediate Window to write the values to the file.
Note that I am aware that I should've done that inside my code, but I didn't think that I'll need the values later on. I was just checking the average. When I finished using the application I wrote, I decided to use those values. Given the time of preparing the values takes hours and hours, there's no possibility of just stopping the execution and re-write what I need in my code and go through the whole process again.
I am also aware that I can run
?_myItems[536][0]
Then copying the values manually in the file. This process will also take a long time giving there's a lot of lists, and I would like to avoid it.
Is there any possibility to make this work in the immediate window?
Update:
I did as suggested in the answers:
_myItems.Select(x => x.Value)
.ToList()
.ForEach(pair => pair
.ToList()
.ForEach(valuePair => valuePair
.Value
.ForEach(numberToWrite => File.AppendAllText("test.txt", numberToWrite.ToString()))))
I got the following error:
Evaluation of method System.Collections.Generic.List`1[System.Collections.Generic.Dictionary`2[System.Int32,System.Collections.Generic.List`1[System.Int32]]].ForEach() calls into native method Microsoft.Win32.Win32Native.GetFullPathName(). Evaluation of native methods in this context is not supported.
I even tried to just Debug.Print
my values, for example like:
_myItems.ToList().ForEach(pair => System.Diagnostics.Debug.Print(pair.Key));
And I ended up getting the same error above. This time with the error of calling the native method:
System.Diagnostics.Debugger.IsLogging()
I searched for this error and according to this answer it's suggested to tick the Use Managed Compatibility Mode from debugging options. However, this option is grayed out in my case since I am already in a debugging session I assume.
As .ForEach
does not exist on the Dictionary<TKey, TValue>
type it only exists on the List<T>
class.
Alternatively you can select the values of the dictionary, convert it into a list and walk through every value and write it into the file.
Adding to Helio Santos I would like to add:
_myItems.Select(x => x.Value).ToList().ForEach(pair => pair.ForEach(intList => intList.ForEach(numberToWrite => File.AppendAllText("test.txt", numberToWrite.ToString()))));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With