我在程序中有一个byte []变量,例如:
byte[] myByteArray = new byte[] { 0xF0, 0x0F };
调试此程序时,我想在Visual Studio的Watch窗口中将字节数组内容显示为单独的十六进制值。
所以我尝试在Watch Window中使用以下LINQ表达式,但没有成功:
myByteArray.Select(value => value.ToString("X2")).ToArray()
观看窗口的错误消息:
错误CS1061:'byte []'不包含'Select'和。的定义 没有扩展方法'选择'接受第一个类型的参数 可以找到'byte []'(你是否错过了使用指令或者 装配参考?)
有没有人知道是否有办法在Visual Studio的Watch窗口中使用LINQ表达式而不安装第三方扩展?
此刻我正在使用VS2017 15.6.6。
编辑:此问题的屏幕截图...
答案 0 :(得分:3)
我尝试重现您的问题并找到以下内容:
监视窗口似乎使用您在代码中引用的命名空间(通过using
)。
如果您不在代码文件中使用linq(和System.Linq
命名空间),则监视窗口无法找到扩展名。
如果您的代码中有using System.Linq;
和使用来自该命名空间的内容,则监视窗口将查找并执行linq扩展。 (如果您不使用System.Linq
中的任何内容,则会优化引用,因此在运行时不会加载此程序集,并且调试程序无法使用它。)
答案 1 :(得分:3)
如果代码中没有'using System.Linq'语句,您仍然可以通过手动调用扩展方法来使用Linq查询:
System.Linq.Enumerable.Select(collection, x=>x.Name)
答案 2 :(得分:0)