fsx脚本中的FSharp反射 - 模块是否定义了名为foo的变量?

时间:2016-09-05 08:57:44

标签: reflection f# f#-scripting

如果我在.fsx脚本中定义了一个名为MyModule的模块,并从另一个.fsx脚本中引用;是否有可能在运行时确定模块是否定义了变量foo

我正在尝试实现这样的事情:

let fooWithDefault = 
    let cfgType:Type = typedefof<MyModule>
    let propOpt = 
        cfgType.GetProperties()
        |> Seq.tryFind( fun p -> p.Name = "foo")

    match propOpt with
    | Some foo -> foo.GetValue(null).ToString()
    | None -> "My Default Value for f"

上述尝试失败并显示错误:

  

类型&#39; MyModule&#39;未定义

1 个答案:

答案 0 :(得分:1)

一种可能的(有点kludgy)方法是枚举执行程序集中的所有类型:

<iframe src="http://linktopage.com" style="width:100%;" frameborder="0">
</iframe>

如果我们有两个名为&#39; MyModule&#39;的实体,如果使用这种方法,我们需要注意存在名称冲突的风险。此外,枚举执行程序集中的所有类型肯定是次优的。

据说这对我试过的有限测试用例似乎没问题