在F#中访问动态属性

kun*_*jee 4 f# c#-to-f# c#-4.0 nancy f#-3.0

我试图访问南希的动态属性.在Nancy中,如果在查询中传递参数,它将作为动态属性.我该如何访问它.

关于这一点有很多讨论/问题,但每一个地方,首先是创造动态然后消费它.我怎样才能消耗已经创建的东西?

这是两个代码段

public class ParameterModule : NancyModule
    {
        public ParameterModule():base("/{about}")
        {
            this.Get["/"] = (parameters) => "Hello About" + parameters.about;
        }
    }
Run Code Online (Sandbox Code Playgroud)

并为F#

type ParameterModule() as this = 
    inherit NancyModule("/{about}")
    do this.Get.["/"] <- fun parameters -> "Hello" + parameters?("about") :> obj
Run Code Online (Sandbox Code Playgroud)

我无法访问,因为对象没有该属性.

如果需要任何进一步的信息,请告诉我.

Gus*_*rra 10

F#动态运算符(?)允许您在不使用引号的情况下传递字符串参数,实现与C#dynamic类似的语法,但您需要首先为具体用例定义它,编译器只提供语法.试试这个:

let (?) (parameters:obj) param =
    (parameters :?> Nancy.DynamicDictionary).[param]

type ParameterModule() as this = 
    inherit NancyModule("/{about}")
    do this.Get.["/"] <- fun parameters -> sprintf "Hello %O" parameters?about :> obj
Run Code Online (Sandbox Code Playgroud)