我在Fsi会话中加载了一个C#dll。运行C#方法会返回一些C#类型。我已经编写了一个辅助函数来探索给定C#类型的属性。
程序失败并显示错误:
stdin(95,21): error FS0039: The type 'RuntimePropertyInfo' is not defined
这可能吗?还是我打死了一匹马?
let getPropertyNames (s : System.Type)=
Seq.map (fun (t:System.Reflection.RuntimePropertyInfo) -> t.Name) (typeof<s>.GetProperties())
typeof<TypeName>.GetProperties() //seems to work.
我的目标只是打印出漂亮的C#字段。
我想我已经找到了办法。它似乎工作。我无法回答自己。所以,我接受任何给出比这更好的例子的人的答案。
let getPropertyNames (s : System.Type)=
let properties = s.GetProperties()
properties
|> Array.map (fun x -> x.Name)
|> Array.iter (fun x -> printfn "%s" x)
答案 0 :(得分:2)
如评论中所述,您可以在类型注释中使用System.Reflection.PropertyInfo
。您的代码也有typeof<s>
,但s
已经是System.Type
类型的变量,因此您只需直接在GetProperties
上致电s
:
let getPropertyNames (s : System.Type)=
Seq.map (fun (t:System.Reflection.PropertyInfo) -> t.Name) (s.GetProperties())
getPropertyNames (typeof<System.String>)
您还可以使用pipe:
完全避免使用类型注释let getPropertyNames (s : System.Type)=
s.GetProperties() |> Seq.map (fun t -> t.Name)