首页 文章

在F#中访问动态属性

提问于
浏览
4

我试图访问南希的动态属性 . 在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 回答

  • 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

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

    这是解决问题的代码

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

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

相关问题