【问题标题】:Using LINQ expressions in Visual Studio's Watch window在 Visual Studio 监视窗口中使用 LINQ 表达式
【发布时间】:2018-10-04 09:47:36
【问题描述】:

我在程序中有一个 byte[] 变量,例如:

byte[] myByteArray = new byte[] { 0xF0, 0x0F };

在调试这个程序时,我想在 Visual Studio 的 Watch 窗口中将字节数组内容显示为单独的十六进制值。

所以我尝试在监视窗口中使用以下 LINQ 表达式,但没有成功:

myByteArray.Select(value => value.ToString("X2")).ToArray()

监视窗口的错误信息:

错误 CS1061:“byte[]”不包含“Select”的定义和 没有扩展方法“选择”接受类型的第一个参数 'byte[]' 可以找到(您是否缺少 using 指令或 汇编参考?)

有谁知道是否有办法在 Visual Studio 的 Watch 窗口中使用 LINQ 表达式而无需安装第三方扩展?

我目前使用的是 VS2017 15.6.6。

编辑:此问题的屏幕截图...

【问题讨论】:

  • 为我工作。您的代码中是否有所需的 using 指令 (System.Linq)?
  • 您是否尝试过使用即时窗口?
  • @Bigiansen :我在即时窗口中收到了相同的错误消息。

标签: c# visual-studio linq debugging visual-studio-2017


【解决方案1】:

如果代码中没有“using System.Linq”语句,您仍然可以通过手动调用扩展方法来使用 Linq 查询:

System.Linq.Enumerable.Select(collection, x=>x.Name)

【讨论】:

  • 谢谢,这正是我想要的。
【解决方案2】:

我尝试重现您的问题,发现如下:

监视窗口似乎使用了您在代码中引用的命名空间(通过using)。

如果在代码文件中不使用 linq(和 System.Linq 命名空间),监视窗口将找不到扩展名。

如果您的代码中有using System.Linq;使用 来自该命名空间的某些内容,则监视窗口将查找并执行 linq 扩展。 (如果您不使用 System.Linq 中的任何内容,则引用将被优化掉,因此此程序集不会在运行时加载,调试器也无法使用它)。

【讨论】:

  • 我用截图更新了我的帖子:即使添加了 using System.Linq 语句,这个问题仍然存在。有什么线索吗?
  • @sɐunıɔןɐqɐp 是的,更新了我的答案,您不仅需要using,还必须确保使用了该程序集中的某些内容,否则它不会在运行时加载并且调试器可以'不要使用它。
  • @sɐunıɔןɐqɐp 而且看来你必须使用命名空间before断点,所以当你点击它时程序集已经加载了。
  • 是的,这就是问题所在,谢谢!虽然我对这个结果不满意;-)
  • 有没有办法强制“using System.Linq”语句不被“优化”?
【解决方案3】:

尝试添加以下内容:(它正在我的测试中工作)

> using System.Collections.Generic;
 using System.Linq;

【讨论】:

  • 这就是为什么您可能在同一文件的其他地方使用 LINQ 表达式。在新的课程中尝试同样的方法。 using 语句将显示为灰色,因为您没有在文件中的任何地方使用 LINQ。在这种情况下,LINQ 在 Watch 窗口和 Immediate 窗口中不可用。
猜你喜欢
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多