0

我只想调试从即时窗口调用查找,可以吗?

            Customer found = listOfCustomers.Find(
                delegate(Customer cu)
                {
                    return cu.Name.ToLower().Contains("adam");
                }
            );
4

2 回答 2

1

不幸的是,在即时窗口中,您不能调用 lambda 表达式(obj => obj.something == something)或匿名方法(delegate () { })

您可能想要添加一些单元测试来测试您的解决方案,或者使用包含您的示例代码的方法创建一个小的 Helper 类并从即时窗口运行它。

于 2012-11-06T19:33:32.293 回答
1

正如许多其他人所指出的,您不能使用即时窗口来执行此操作。我确实有另一个可能对你有用的建议。我一直都在使用它,它是我长期以来使用过的最好的工具。

Roslyn是 Microsoft 的一个项目,它向开发人员公开 C# 和 VB.NET 编译器。出于许多其他原因,这很酷,但其中一个特别适合您的需求。它包括一个 C# 交互窗口。

虽然它是 CTP(甚至还没有发布测试版),但我发现它相当稳定。2012 年 6 月的 CTP 支持 VS2010,而 2012 年 9 月的 CTP支持VS2012。

您可以使用该指令引用其他 DLL(系统和项目)#r,然后使用普通 C# 代码并插入。它支持几乎所有的语言特性(我认为 async/await、PInvoke、动态和其他一些东西不支持)。这是它的输出示例。

Microsoft (R) Roslyn C# Compiler version 1.1.20524.4
Loading context from 'CSharpInteractive.rsp'.
Type "#help" for more information.
> var strarr = new[] { "a", "b", "c", "d", "e", "f", "g", "h" };
> strarr
string[8] { "a", "b", "c", "d", "e", "f", "g", "h" }
> strarr.TakeWhile(s => s != "e")
TakeWhileIterator { "a", "b", "c", "d" }
> #r "D:\SVN\Lucene.Net\Trunk\bin\Lucene.Net.dll"
> using Lucene.Net.Store;
> var d = new RAMDirectory();
> d.Dispose()
<void>
> strar
(1,1): error CS0103: The name 'strar' does not exist in the current context
> #reset
Resetting execution engine
Loading context from 'CSharpInteractive.rsp'.
> 

如您所见,您可以使用 lambda(也可以使用匿名方法)以及其他语言功能。我还引用了我计算机上的 Lucene.Net dll,然后能够导入命名空间并使用这些类型。您也可以引用整个项目,我右键单击它并选择“Reset Interactive from Project”,但我发现它有时会抛出错误并且不起作用。

如果您正在寻找一种无需运行调试器即可使用代码的工具,我建议您研究一下 Roslyn。

于 2012-11-07T19:06:42.277 回答