Как создать Action в F#?

Я использую инфраструктуру Moq для модульного тестирования и хотел бы иметь возможность передать действие для регистрации методов void.

let log = new Mock<ILog>()
let quot = <@ fun (mock:ILog) -> mock.Info(It.IsAny<string>) @>  
let expr = (quot.ToLinqExpression() :?> Expression<Action<ILog>>)
log.Verify(expr)

Этот код завершается со следующей ошибкой:

System.InvalidCastException: невозможно преобразовать объект типа «System.Linq.Expressions.MethodCallExpressionN» для ввода «System.Linq.Expressions.Expression 1 [System.Action 1 [log4net.ILog]]».

Я могу распечатать тип, используя

printfn "%s" (quot.Type.ToString())

, который выводит

Microsoft.FSharp.Core.FSharpFunc`2[log4net.ILog,Microsoft.FSharp.Core.Unit]

Итак, как мне создать Действие?

8
задан Guvante 3 April 2012 в 18:37
поделиться