Интеграция F # для Visual Studio не поддерживает выражения F # в непосредственном окне (или в наблюдениях), поэтому единственный вариант - написать код C #, соответствующий скомпилированному представлению, которое использует F #. Я попытался сделать это, и у меня возникла та же проблема, что и вы, описанная выше - метод Invoke
, похоже, есть (в Reflector), но Visual Studio не хочет вызывать его напрямую. Я попробовал это на следующем примере:
let foo f =
let n = f 1 2 // Breakpoint here
n + 1
Однако есть и другие способы вызова функции. В этом случае фактический код, сгенерированный компилятором F #, является вызовом метода InvokeFast
. Если вы введете следующее в ближайшее окно, оно будет работать:
Microsoft.FSharp.Core.FSharpFunc<int, int>.InvokeFast<int>(f, 1, 2) |
Также кажется, что вы можете вызвать обычный метод Invoke
, используя dynamic
из C # 4.0 (доказывая, что метод действительно существует!):
((dynamic)f).Invoke(1, 2)
Это работает, только если вы добавляете ссылку на Microsoft.CSharp.dll
(и используете некоторый тип, определенный в сборке где-то в вашем коде - например, в качестве аннотации - для загрузки).