.net 在调试中可视化列表(或打印到即时窗口)

zpf6vheq  于 2022-12-14  发布在  .NET
关注(0)|答案(3)|浏览(140)

当我试图查看字典条目的内部列表时,我讨厌一个接一个地展开每个节点。我正在寻找一种更简单的方法来做到这一点。
例如:
我有一个Dictionary对象Dictionary(Of AnotherObject, Integer),我希望在调试期间看到AnotherObject的一个属性列表。
通常我会这样说:

For Each item As DictionaryEntry(Of AnotherObject, Integer) in myDict
          Debug.Writeline(item.Name)
Next

但是即时窗口不支持循环。
在即时窗口或调试可视化工具中,有什么实际的方法可以做到这一点吗?

7ajki6be

7ajki6be2#

虽然你不能在即时窗口中使用循环,但是它允许你声明新的变量,这样你就可以创建新的列表等等,然后这些列表可以显示在监 windows 口中。

brccelvz

brccelvz3#

(古老的问题,但是. . . . . .)我经常使用LINQ来实现这一点。根据即时窗口上下文中存在的内容,您可以使用System.Linq.Enumerable的静态成员和扩展方法语法,也可以将其用作普通的静态方法。
我将使用C#语法,因为我不知道VB语法是什么(也许一些VB向导会沿着并修复这个问题)。
我刚刚用Debug〉StepIntoNewInstance启动了一个小的控制台项目,我发现我必须加载System.Core才能使它运行

System.Reflection.Assembly.Load("System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
args.Select(arg => $"{arg}").ToArray()
System.Linq.Enumerable.Select(args, arg => $"{arg}").ToArray()

(显然,arg在这里是一个字符串,不需要转换为字符串--我只是使用$"{arg}”来显示将某个内容格式化为字符串的简洁方法)
(除非我完全误解了OP的意图)我认为OP的等价物如下所示

myDict.Keys.Select(key => $"{key.PropertyOfKey}").ToArray()

此外,您还可以利用LINQ的强大功能来操纵所显示的内容-- Where、OrderBy、Skip等。

相关问题