【问题标题】:How to Watch Linq Expressions in VS 2015如何在 VS 2015 中观看 Linq 表达式
【发布时间】:2015-11-15 15:09:45
【问题描述】:

我正在尝试在 Visual Studio 2015 中调试 Linq 表达式。当我将它添加到监视窗口时,我在值列中收到以下错误。

field.DomainValues.Where(d => d.Active) 错误 CS1061: “List”不包含“Where”的定义,也没有 扩展方法“Where”接受类型的第一个参数 可以找到“列表”(您是否缺少 using 指令 还是程序集参考?)

当我尝试在即时窗口中执行时,我得到了同样的错误。

错误 CS1061:“列表”不包含 'Where' 并且没有扩展方法 'Where' 接受第一个参数 可以找到类型“列表”(您是否缺少使用 指令还是程序集引用?)

我认为基于这篇文章在 Visual STudio 2015 中添加了对此的支持 - http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/support-for-debugging-lambda-expressions-with-visual-studio-2015.aspx

我发现这篇文章概述了一些限制,但没有一个适用于我的 x86 WPF 应用程序。 http://dotnetdeewane.blogspot.com/2015/03/support-for-debugging-lambda.html

  • 我有一个 x86 .Net 4.5 WPF 应用程序
  • 在我的输出窗口中,我看到 System.Core 已加载。

已加载 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'

  • 我的方法是静态的而不是异步的。我的班级顶部确实有 using System.Linq 语句。

    using Infragistics.Windows.Editors;
    using Microsoft.Practices.ServiceLocation;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows;
    
    public static ValueEditor SelectEditor(ColumnConfig config, TableInfo info, object value = null)    
    {    
        //do some stuff    
        field.FilteredDomainValues = field.DomainValues.Where(d => d.Active).ToList();    
        //do some other stuff    
    }
    
  • 我没有使用动态类型

我还安装了 Visual Studio 2012 和 Visual Studio 2013。

我正在使用 Resharper。

还有什么我可以在 VS 选项中查看的内容

【问题讨论】:

  • 你的代码有用于 System.Linq 吗?
  • 是的。我的代码编译并运行良好,它只是尝试使用看到此错误的新调试工具。我更新了我的帖子以显示这一点。
  • 另一个人对 System.Linq 和 Resharper 扩展有另一个问题。见stackoverflow.com/questions/453451/…
  • 你最终找到解决办法了吗?
  • Enumerable.Range 放在App.xaml.cs 上对我有用(.NET4.0 WPF)。

标签: c# .net visual-studio


【解决方案1】:

根据MSDN

注意:不支持需要运行本机函数的 Lambda 表达式(例如 LINQ-to-SQL)。

我在您的示例中看到,您方法的参数是 TableInfo、ColumnConfig 类型,这听起来与我相关的 SQL。 field.DomainValues 是否有机会指向数据库并使用 LINQ-To-SQL 来解析?

【讨论】:

    【解决方案2】:

    关键是确保加载了 System.Core.dll。一种简单的方法是在您正在调试的文件的顶部添加以下内容:

    #if DEBUG
    using System.Diagnostics;
    #endif
    

    【讨论】:

    • 就是这样。我在单元测试项目中遇到了同样的问题。上面的代码修复了 Watch 和 Immediate Window。
    【解决方案3】:

    我遇到了同样的问题,我在代码中调用 Enumerable.Range 修复了它,然后在观察窗口中检查 lambda 表达式

    【讨论】:

    • 你能说得更具体一点吗?您在实际代码中添加了 Enumerable.Range 调用只是为了方便调试?或者你在立即/观看中运行它?
    • 嗯,我也试过了。并且 Watch/Immediate 仍然抱怨找不到 .Select()、.Where()、.Any()
    【解决方案4】:

    我使用 Debug > Windows > 立即窗口。它让我可以输入用于调试和试验的表达式。它带有完整的 Intellisense 支持

    field.DomainValues
    field.DomainValues.Where(d => d.Active)
    field.DomainValues.Count(d => d.Active)
    field.DomainValues.Where(d => d.Active).First()
    

    【讨论】:

    • 我在使用即时窗口时看到了同样的错误。我更新了我的原始帖子以包含它。
    • 我过去所做的只是 .ToArray() 我的列表(在即时窗口中),然后从那里进行检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2012-05-27
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多