很酷的新 F# 3.0 功能类型提供程序可用于弥合 F# 数据类型或类与 XML 或 WSDL 等数据源结构之间的不匹配。然而,这种不匹配对于 C# 等其他 .NET 语言来说也是一个挑战。
我想在 C# 代码中使用 F# 3.0 提供程序。如果可以的话,我该怎么做?此外,如果我们不能,C# 实现需要什么才能使用它们?
我认为@kvb 很好地概述了一些技术困难。我同意类型推断将会有问题 - 您基本上只能在本地使用提供程序生成的类型,类似于匿名类型。我认为 C# 可能在 Roslyn 中提供类似的东西,但我怀疑它会像 F# 中那样优雅、平滑地集成(其中类型提供程序实际上是语言特征不仅仅是tool).
回答你的两个具体问题:
[如何]在 C# 代码中使用 F# 3.0 提供程序?
F# 类型提供程序实际上只能由 F# 编译器理解,因此您需要从 F# 使用它们。为了生成的类型提供程序(SQL、实体、WSDL、配置文件),您可以从 F# 引用提供程序并使用 C# 项目生成的类型。
For erasing类型提供程序您将无法执行此操作,因为类型并不真正存在,只有 F# 可以看到它们。因此,最好的选择是用 F# 编写处理代码,并将结果作为记录集合或其他易于从 C# 使用的类型返回。
C# 实现需要什么才能使用它们?
当然,我可以只是说“C# 必须支持类型提供程序!”,但这里还有一些更多的想法。类型提供程序只是 .NET 程序集,它们不使用任何特定于 F# 的类型。这ITypeProvider界面 http://msdn.microsoft.com/en-us/library/hh323952.aspx可以被包括 C# 在内的任何 .NET 语言使用,因此如果 C# 设计者愿意,他们可以重用已经为 F# 构建的所有优秀提供程序。
因此,将此建议提交给C# 用户声音 https://visualstudio.uservoice.com/forums/121579-visual-studio/category/30931-languages-c-或者在其他地方提倡它(或者说服 Mono 团队实现这个!),也许它会被添加到 C# 中(vNext + 1 + ...
)。目前,您只能获得 F# 中的所有好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)