我能否在F#的Type Provider中提供一个Type作为输入?

16

我应该注意哪些陷阱?

您是否知道处理我可能遇到的相同问题的现有代码?

谢谢

1个回答

15

很遗憾,您无法将类型作为静态参数传递给类型提供程序。使用MyProvider< "first argument", 42 >传递的静态参数必须是原始类型(如stringint等)。我没有在文档中看到列表,但Type肯定不受支持。

这样做的问题在于,您可能会将typeof<MyType>传递给它,其中MyType在使用类型提供程序的文件中声明,因此F#编译器首先必须编译文件的第一部分,然后调用提供程序,然后继续。这听起来可能是可行的,但对于F#团队来说可能是低优先级的。

向类型提供程序传递有关类型的信息的最佳方法是给它一个类型名称,然后使用反射查找该类型(仅当该类型来自已编译的程序集时才有效):

type MyTest = MyTypeProvider<"System.Int32">

有道理。因此,在我看来,我们需要执行级别的概念。类似于计算表达式,它可以将类型提供给主环境,而不需要使用外部DLL,并且其代码在其他更高的执行级别之前执行。 - nicolas

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