【问题标题】:Visual Studio format specifier for C# arrays?C# 数组的 Visual Studio 格式说明符?
【发布时间】:2011-09-30 19:29:56
【问题描述】:

在 C++ 中我可以做到这一点,但我不知道如何在 C# 中做到这一点。基本上,我想在我的 Visual Studio 2008 调试器的监视窗口中使用格式说明符来仅查看数组的切片或部分。例如,如果我有一个像这样的二维数组:

int[,] myArray = new int[5,15]

我可能只想查看列表中的最后 15 个项目,因此我希望能够将其放入我的监视窗口(或类似的东西):

myArray[5],15

Visual Studio 中有这样的东西吗?

【问题讨论】:

    标签: c# visual-studio-2008 debugging format-specifiers


    【解决方案1】:

    看看这个。这个 VS 插件增加了您可以在调试模式中可视化数据的方式。

    http://karlshifflett.wordpress.com/mole-2010/

    ...还有一个 2008 版本

    http://karlshifflett.wordpress.com/mole-2010/mole-for-visual-studio/

    【讨论】:

      【解决方案2】:

      这并不能直接回答您的问题,但如果您已加载 System.Core,并且您的范围内有 using System.Linq;,您可以评估 myArray[5].Reverse().Take(5).Reverse() 以获得最后 5 个值。

      【讨论】:

      • 在 Watch 窗口中,我们没有可用的 Linq 命名空间。但你可以这样做:System.Linq.Enumerable.ToArray(System.Linq.Enumerable.Reverse(System.Linq.Enumerable.Take(System.Linq.Enumerable.Reverse(x), 5))) :)
      • 好吧,准确地说,如果调试器的当前位置在具有访问权限的作用域(例如方法)内,您确实在 Watch 窗口中拥有可用的 Linq 命名空间给它。否则,您使用完全限定名称的方式是一个很好的解决方法:)
      • 哦,我明白了。在那里学到了一些新东西。有道理,您应该能够观看当前范围内的任何内容,其中包括您using 的任何内容。不过,如果 Linq 命名空间始终可用,那就太好了……
      【解决方案3】:

      Visual Studio 2008 调试器支持的格式说明符描述为here。显然,C# 调试器不支持相同的specifiers as C++

      @Omers answer 的基础上,您可以使用以下观察表达式观察数组的“已处理”版本:

      System.Linq.Enumerable.Reverse(System.Linq.Enumerable.Take(System.Linq.Enumerable.Reverse(x), 2)), results

      注意:results 格式说明符在您只对结果感兴趣时观看IEnumerable 结果时很有用。

      【讨论】:

      • 这些都是很好的答案和可行的选择。很难只选择一个答案!感谢彼得和大家。
      猜你喜欢
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      相关资源
      最近更新 更多