F#类型提供程序使用案例

3

我对类型提供程序有些困惑。我想了解类型提供程序在以下用例中的实用性。

非常不幸的是,我们的遥测 API 返回对象为 List<Dictionary<string, object>>Dictionary 的键(即列名)为字符串,值可以是任何对象(虽然通常是 System 命名空间中的某个值类型)。此外,还有一种返回 Dictionary<string, Type> 集合的方法,表示模式(列名 -> 类型绑定)。我们通常使用这些数据进行即席/探索性分析和报告。

F# 与 R 类型提供程序似乎是上述分析的强大工具。只需通过将列名作为字符串键入并转换对象即可访问数据。我想创建一个类型提供程序,它将从给定的字典(创建字典的连接字符串)创建强类型。例如,从

new List<Dictionary<string, object>> 
{ 
    new Dictionary<string, object> { {"a", 1}, {"b","data"}, {"c", DateTime.UtcNow } },
    new Dictionary<string, object> { {"a", 3}, {"b","data2"}, {"c", DateTime.UtcNow } }
}

I would like to get

type MyObject
    member a : int
    member b : string
    member c : DateTime

List<MyObject> ...

这是否是类型提供程序的适当使用方式?正如我所说,我对这个领域还很陌生,如果你有任何反馈意见,将不胜感激。此外,如果您有类似问题的示例,可以快速获取并开始,请分享(Csv类型提供程序似乎是一个很好的起点)。

1个回答

6
如果对遥测API的输入有用,有两种简单的方法:
  1. 代码生成
  2. 类型提供程序
类型提供程序特别适合以下情况:
  • 数据频繁更改
  • 遥测数据很大
使用类型提供程序可以在特定间隔(例如每次应用程序编译时)检查API。类型提供程序可以是惰性的,因此只为所消耗的数据生成代码,因此如果数据很大,则选择类型提供程序也更为合适。
Michael Newton有一个很好的介绍编写类型提供程序的文章:从基础开始的类型提供程序

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接