代码之家  ›  专栏  ›  技术社区  ›  Christopher Bennage

在F中,如何生成Func<obj>类型的表达式?

  •  12
  • Christopher Bennage  · 技术社区  · 16 年前

    ModelMetadataProviders.Current.GetMetadataForType()

    我如何用F#构造这个值?

    3 回复  |  直到 16 年前
        1
  •  25
  •   Tomas Petricek    16 年前

    调用接受 Func 您不需要显式地创建委托,因为F#隐式地将lambda表达式转换为委托类型(在成员调用中)。我认为只要用lambda函数调用方法就可以了(如果不行,你能分享错误消息吗?)

    下面是一个简单的例子来说明这一点:

    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 ),以确保lambda函数返回正确的类型( obj ). 如果要使用 let ,则它将不起作用,因为隐式转换只有在作为参数直接传递时才起作用。但是,在这种情况下,它会使代码更好一些。

        2
  •  8
  •   Tim Robinson    16 年前

    你通常可以通过任何 () -> obj 它将自动转换为 Func<obj> . 你可能需要把衣服包起来 fun 具有 函数(&L);目标> :

    > let d : Func<obj> = Func<obj>(fun () -> box "hello");;
    
    val d : Func<obj>
    
        3
  •  1
  •   Brian    16 年前
    let f = new System.Func<obj>(fun() -> printfn "ok"; new obj())