相关疑难解决方法(0)

如何创建可以在C#中使用的F#类型提供程序?

如果我使用程序集FSharp.Data.TypeProviders 4.3.0.0中的F#Type Providers,我可以在一个非常简单的F#库中创建类型.然后,我可以使用这些类型而不依赖于程序集FSharp.Data.TypeProviders.那太可爱了!这是一个例子:

我创建了一个名为TryTypeProviders的F#库项目.我把它放在.fs中:

module TryTypeProviders
type Northwind = Microsoft.FSharp.Data.TypeProviders.ODataService
Run Code Online (Sandbox Code Playgroud)

然后我就可以使用C#项目中的F#库了:

public static void Main()
{
    var c = new TryTypeProviders.Northwind();
    foreach (var cust in c.Customers)
        Console.WriteLine("Customer is: " + cust.ContactName);
    Console.ReadKey(true);
}
Run Code Online (Sandbox Code Playgroud)

我还没有找到任何有关如何创建这样的类型提供程序的工作示例.无法从C#访问FSharpx.TypeProviders中的类型提供程序.我的猜测是它们是擦除类型而不是生成类型.我仍然有点模糊,但是它在这里定义为:

  1. 生成的类型是嵌入到使用类型提供程序的程序集中的真实.NET类型(这是包装代码生成工具的类型提供程序,如sqlmetal使用)
  2. 擦除类型是模拟类型,在编译代码时由其他类型表示.

MSDN 教程中提到的F#3.0示例包中的示例对我不起作用.他们建立,但当我尝试使用它时,我得到错误.

open Samples.FSharp.RegexTypeProvider
type PhoneNumberRegEx = CheckedRegexProvider< @"(?<AreaCode>^\d{3})-(?<PhoneNumber>\d{3}-\d{4}$)">
Run Code Online (Sandbox Code Playgroud)
open Samples.FSharp.MiniCsvProvider
type csv = MiniCsvProvider<"a.csv">
Run Code Online (Sandbox Code Playgroud)

它最后一次发布于2011年3月,我的猜测是它们还没有反映Visual Studio 2012附带的类型提供程序的最终版本.

F#类型提供商看起来像一项伟大的技术,但我们需要帮助构建它们.任何帮助表示赞赏.

f# type-providers

26
推荐指数
1
解决办法
3693
查看次数

标签 统计

f# ×1

type-providers ×1