При вызове метода, который принимает любой делегат из Func
, вам не нужно явно создавать делегат, потому что F # неявно преобразует лямбда-выражения в тип делегата (в вызовах членов).Я думаю, что простой вызов метода с лямбда-функцией должен работать (если это не так, не могли бы вы поделиться сообщением об ошибке?)
Вот простой пример, демонстрирующий это:
type Foo() =
member x.Bar(a:System.Func<obj>) = a.Invoke()
let f = Foo()
let rnd = f.Bar(fun () -> new Random() :> obj)
В вашем случае, я полагаю, что-то вроде этого должно работать:
m.GetMetadataForType((fun () -> <expression> :> obj), modelType)
Обратите внимание, что вам нужно явное повышение (expr :> obj
), чтобы лямбда-функция возвращала правильный тип (obj
).Если вы хотите назначить лямбда-функцию локальному значению, используя let
, тогда оно не будет работать, потому что неявное преобразование работает только тогда, когда оно передается в качестве аргумента напрямую.Однако в этом случае код становится немного приятнее.