如何从VS2010立即窗口调用F#功能

Mau*_*gan 7 debugging f# visual-studio-2010 visual-studio

在调试F#应用程序时,我希望能够从VS2010立即窗口调用F#方法,但它似乎不起作用.问题似乎是F#方法实际上是FSharpFunc对象.我尝试使用"调用"方法,但交互式窗口无法识别它.

Tom*_*cek 10

Visual Studio的F#集成不支持立即窗口(或监视)中的F#表达式,因此唯一的选择是编写与F#使用的编译表示相对应的C#代码.我尝试这样做,我遇到了与你描述的相同的问题 - 该Invoke方法似乎存在(在Reflector中),但Visual Studio不想直接调用它.我使用以下示例尝试了它:

let foo f = 
  let n = f 1 2 // Breakpoint here
  n + 1
Run Code Online (Sandbox Code Playgroud)

但是,还有其他方法可以调用该函数.在这种情况下,F#编译器生成的实际代码是对InvokeFast方法的调用.如果您在即时窗口中键入以下内容,它将起作用:

Microsoft.FSharp.Core.FSharpFunc<int, int>.InvokeFast<int>(f, 1, 2)  |
Run Code Online (Sandbox Code Playgroud)

您还可以Invoke使用dynamicC#4.0 调用常用方法(证明该方法实际存在!):

((dynamic)f).Invoke(1, 2)
Run Code Online (Sandbox Code Playgroud)

这仅适用于添加引用Microsoft.CSharp.dll(并使用代码中某处定义的某些类型 - 例如作为注释 - 以便加载它).