在F#中访问动态属性

时间:2013-07-14 14:22:03

标签: c#-4.0 f# nancy c#-to-f# f#-3.0

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

关于这一点有很多讨论/问题,但每一个地方,首先是创造动态然后消费它。我如何消费已经创建的内容?

以下是两个代码段

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

和F#

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

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

如果需要进一步的信息,请告诉我。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我通过类型转换为dynamicdictionary解决了问题。如果有更好的方法请告诉我。将问题保持开放直到那时......

以下是解决问题的代码

type ParameterModule() as this = 
    inherit NancyModule("/{about}")
    do this.Get.["/"] <- fun parameters -> (parameters :?> Nancy.DynamicDictionary).["about"].ToString() :> obj

答案 2 :(得分:1)

也许这可以让你开始http://hubfs.net/topic/None/74053