F# 从静态ProvidedMethod返回ProvidedType

F# 从静态ProvidedMethod返回ProvidedType,f#,type-providers,F#,Type Providers,我有一个ProvidedType,foo,它在内部表示为映射。此类型上提供了一些属性,这些属性应返回字典中成员的值 我想从另一个提供的类型上的静态方法返回此providedtype的实例。我假设我可以通过返回地图的一个实例来实现这一点: let m = ProvidedMethod(nm, [], foo, IsStaticMethod = true) m.InvokeCode <- fun args -> <@@ [

我有一个ProvidedType,foo,它在内部表示为映射。此类型上提供了一些属性,这些属性应返回字典中成员的值

我想从另一个提供的类型上的静态方法返回此providedtype的实例。我假设我可以通过返回地图的一个实例来实现这一点:

    let m =
      ProvidedMethod(nm, [], foo, IsStaticMethod = true)

    m.InvokeCode <- fun args ->
      <@@

        [|
          "foo", box "abc"
          "bar", box 123
        |] |> Map

      @@>

如何正确执行此操作?

这取决于您所说的内部表示为映射的意思。如果您的意思是提供的类型的基本类型是Map,那么您所拥有的应该按原样工作。另一方面,如果您的意思是基类型是obj,但在运行时保持不变,即这是一个映射,那么您需要在引号中插入强制转换:

<@@
    let fieldmap = ((%%(args.[0]) : obj) :?> Map<string,obj>)
    fieldmap.[fieldName]
@@>

谢谢,原来是打字错误。我把基类型放在了错误的providedtype:P上
<@@
    let fieldmap = ((%%(args.[0]) : obj) :?> Map<string,obj>)
    fieldmap.[fieldName]
@@>