如何根据参数读取属性值

时间:2016-05-09 16:21:41

标签: csv reflection properties f# arguments

如何在给定字符串参数的情况下获取属性的值。

我有一个对象CsvProvider.Row,它有属性a,b,c。 我想根据作为字符串参数给出的属性获取属性值。 我试过这样的事情:

let getValue (tuple, name: string) =
    snd tuple |> Seq.averageBy (fun (y: CsvProvider<"s.csv">.Row) -> y.```name```)

但是它给了我以下错误:

  

lambda表达式中的意外保留关键字。预计不完整   在此点或其他标记之前或之前的结构化构造。

简单的函数调用应如下所示:

getValue(tuple, "a")

它应该等同于以下函数:

let getValue (tuple) =
        snd tuple |> Seq.averageBy (fun (y: CsvProvider<"s.csv">.Row) -> y.a)

这样的事情是否可能?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

如果您通过列名静态访问数据,则CSV类型提供程序非常好,因为您可以通过类型推断和检查获得良好的自动完成功能。

但是,对于动态访问,可能更容易直接使用基础this(也是F#Data的一部分),而不是使用类型提供程序:

CsvFile

唯一不幸的是,这些项目是通过索引访问的,因此如果您想通过名称轻松访问它们,则需要构建一些查找表。