Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 在F中访问动态属性#_C# 4.0_F#_Nancy_C# To F#_F# 3.0 - Fatal编程技术网

C# 4.0 在F中访问动态属性#

C# 4.0 在F中访问动态属性#,c#-4.0,f#,nancy,c#-to-f#,f#-3.0,C# 4.0,F#,Nancy,C# To F#,F# 3.0,我试图访问南希的动态财产。在查询中,如果传递参数,它将作为动态属性出现。我怎样才能访问它 关于这一点有很多讨论/问题,但每一个地方,首先是创建动态,然后使用动态。如何使用已创建的内容 下面是两个代码片段 public class ParameterModule : NancyModule { public ParameterModule():base("/{about}") { this.Get["/"] = (parameters

我试图访问南希的动态财产。在查询中,如果传递参数,它将作为动态属性出现。我怎样才能访问它

关于这一点有很多讨论/问题,但每一个地方,首先是创建动态,然后使用动态。如何使用已创建的内容

下面是两个代码片段

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

键入ParameterModule(),如下所示=
继承NancyModule(“/{about}”)
执行此操作。获取。[”/“]“Hello”+参数?(“关于”):>obj
我无法访问,因为对象没有该属性


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

我已经通过将文本转换到dynamicdictionary解决了这个问题。如果有更好的办法,请告诉我。我会把问题保留到那时

下面是解决此问题的代码

type ParameterModule() as this = 
    inherit NancyModule("/{about}")
    do this.Get.["/"] <- fun parameters -> (parameters :?> Nancy.DynamicDictionary).["about"].ToString() :> obj
键入ParameterModule(),如下所示=
继承NancyModule(“/{about}”)
执行此操作。获取。[”/“](参数:?>Nancy.DynamicDictionary)。[“关于”].ToString():>obj

也许这可以让您开始

F#dynamic操作符
(?)
允许您在不使用引号的情况下传递字符串参数,实现与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
let(?(参数:obj)参数=
(参数:?>Nancy.DynamicDictionary)。[param]
键入ParameterModule(),如下所示=
继承NancyModule(“/{about}”)
执行此操作。获取。[”/“]sprintf“Hello%O”参数?关于:>obj

我试过。。。但很少有接口不允许我继承F#中的DynamicDictionary。嘿,谢谢你的回答。但在实现这一点时,我遇到了这样的错误:从类型“a”到DynamicDictionary的运行时强制或类型测试涉及基于此程序点之前的信息的不确定类型。某些类型上不允许进行运行时类型测试。需要进一步的类型注释。很抱歉,必须将参数声明为
obj
,我已经用那个fixedDone更新了答案。。。谢谢我选择了正确答案,但我必须承认,现在我明白了为什么使用F#的人更喜欢它。。。这不会使代码变得复杂,但会使代码更加外行化。连我妈妈都能理解。
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