在C#中使用来自F#的非歧视联盟类型

时间:2016-01-03 21:29:33

标签: f#

我已在F#库中声明了一些我希望从C#代码填充的数据类型。我遇到的问题是只有DU被“导出”为一个类,请考虑这个示例文件Test.fs:

module Test

type SimpleType = string

type SimpleList = string list

type SimpleDU =
     | A
     | B

type SimpleRecord = { Text : string }

刚开始引用F#项目时我很困惑,我不允许在C#中使用SimpleTypeSimpleList类型。我查看了生成的带有ILDasm的F#库,并且只找到了SimpleDUSimpleRecord类型的代码,它们可以在C#代码中完全访问。

有没有办法“导出”非DU类型,以便它们可以在C#中使用,或者我是否必须将每个非DU类型声明为显式记录?

1 个答案:

答案 0 :(得分:5)

的定义
type SimpleType = string
type SimpleList = string list

是类型abbreiviations,在类型检查期间被删除,不创建新类型。这些在说明书中描述:

8.3类型缩写

  

类型缩写为其他类型定义新名称。例如:

type PairOfInt = int * int
     

在编译期间扩展和删除类型缩写并执行   没有出现在F#声明的详细形式中,它们也不是   在运行时引用或访问。