如何在 Visual Studio 2017 中修复断点表达式

Posted

技术标签:

【中文标题】如何在 Visual Studio 2017 中修复断点表达式【英文标题】:How to fix breakpoint expressions in Visual Studio 2017 【发布时间】:2019-01-30 10:32:42 【问题描述】:

使用 VS2012,您可以在断点表达式中使用一些收集方法,例如:

test.Contains("3")

但是,对于 2017,这会引发以下错误:

断点的条件未能执行。条件是 'test.Contains("3")'。返回的错误是 'error CS1061: 'string[]' 不包含“包含”的定义且不可访问 扩展方法“包含”接受类型的第一个参数 'string[]' 可以找到(您是否缺少 using 指令或 装配参考?)'。单击“确定”在此断点处停止。

这只是与我的 VS2017 实例有关,还是他们在 2017 年破坏了某些东西?有谁知道如何解决它。断点表达式在 2012 年很棒,但在 2017 年几乎没用。

【问题讨论】:

您的错误涉及string[] 而不是string。你确定test 不是无意中是一个数组而不是一个字符串吗? 【参考方案1】:

我刚刚在我的 Visual Studio Enterprise 2017 版本 15.9.5 中尝试过这个。我的条件断点test.Contains("foo") 按预期工作。

【讨论】:

【参考方案2】:

您的意思是 test 的类型为 List<string>string[](正如错误消息所暗示的那样)?

如果您打算使用System.Collections.Generic.List.Contains(string),只需修复test 的类型即可。


如果您希望 test 的类型为 string[],请阅读到结尾。

您收到的错误与您在代码中从断点编写条件表达式时遇到的编译器错误相同:

using System;

internal static class Program

    private static void Main(string[] args)
    
        string[] test =  "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ;

        test.Contains("3"); //Compiler Error
    

string[] 不包含Contains 接受string 类型的第一个参数的定义。

为了访问命名空间System.Linq 中的扩展方法Enumerable.Contains,您需要使用代码中的using 指令将其纳入范围:

using System.Linq;

此外,您需要在代码中使用该命名空间中的任何类型或方法,以使断点条件按预期工作。

或者,您可以直接调用该方法:

System.Linq.Enumerable.Contains(test, "3")

但是,您仍然需要添加相应的 using 指令,并在代码中实际使用该命名空间中的任何类型或方法。

【讨论】:

嗨,是的,这是因为变量的类型是 List,而不是 string[],但是我确信这曾经只适用于旧版本 - 不过尚未确认。

以上是关于如何在 Visual Studio 2017 中修复断点表达式的主要内容,如果未能解决你的问题,请参考以下文章

Intel parallel studio 2017 集成在visual studio 2013 中,现在如何集成到visual studio 2015

如何使用Visual Studio 2013或Visual Studio 2017设置TFS 2013

如何设置 TFS 2013 以使用 Visual Studio 2013 或 Visual Studio 2017 构建

无法找到visual studio 2017生成工具

visual studio 2017 如何下载和安装

如何在 Visual Studio 2017 中创建 Visual c++ MFC 控制台项目