F#类型提供者用例

Kla*_*ark 3 .net f# dictionary type-providers

我有点难以掌握类型提供商.我希望得到一些关于类型提供者方法对以下用例的有用性的反馈.

很遗憾,我们的遥测API将对象返回为List<Dictionary<string, object>>.Dictionary具有键的字符串(意思是列名),值可以是任何对象(但是,通常这是System命名空间中的某种值类型).此外,还有一个方法可以返回Dictionary<string, Type>表示模式的集合(列名称 - >类型绑定).我们通常将此数据用于临时/探索性分析和报告.

带有R型提供者的F#似乎是上述分析的一个很好的武器.只是通过键入字符串作为字符串和转换对象来访问数据实际上就是阻碍了.我想创建一个类型提供程序,它将从给定的字典(创建字典的连接字符串)创建强类型.例如来自

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 } }
}
Run Code Online (Sandbox Code Playgroud)

我想得到

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

List<MyObject> ...
Run Code Online (Sandbox Code Playgroud)

这是类型提供者的适当使用吗?正如我所说,我对这个领域很陌生,所以任何反馈都会受到赞赏.此外,如果您有任何类似问题的例子,我可以用来快速从地面开始请分享(Csv类型提供商似乎是一个很好的起点).

Phi*_*ord 6

如果对遥测API的类型访问很有用,有两种简单的方法:

  1. 代码生成
  2. 类型提供商

在以下情况下,类型提供商特别合适

  • 数据经常变化
  • 遥测数据很大

使用类型提供程序,可以以特定间隔检查API,例如,每次编译应用程序时.类型提供程序可以是惰性的,因此只为所使用的数据生成代码,因此如果数据很大,那么它也是更合适的选择.

迈克尔·牛顿(Michael Newton)对编写类型提供者:类型提供者从一开始就有很好的介绍