代码之家  ›  专栏  ›  技术社区  ›  Paul Karam

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

  •  2
  • Paul Karam  · 技术社区  · 6 年前

    我正在尝试使用 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”无效

    我四处寻找 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.Win32 native.GetFullPathName()。不支持在此上下文中计算本机方法。

    我甚至试着 Debug.Print

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

    最后我也犯了同样的错误。这次调用本机方法时出错:

    System.Diagnostics.Debugger.IsLogging()

    我搜索了这个错误并根据 this answer 建议勾选 从调试选项。但是,这个选项在我的例子中是灰色的,因为我已经在调试会话中了。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Kunal Mukherjee    6 年前

    作为 .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()))));
    
        2
  •  0
  •   Helio Santos    6 年前

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

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