【问题标题】:Use non Discriminated Union types from F# in C#在 C# 中使用来自 F# 的非区分联合类型
【发布时间】:2016-01-03 21:29:32
【问题描述】:

我已经在 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 类型声明为显式记录?

【问题讨论】:

    标签: f#


    【解决方案1】:

    定义

    type SimpleType = string
    type SimpleList = string list
    

    是类型缩写,在类型检查期间被消除并且不会创建新类型。这些在规范中有所描述:

    8.3 类型缩写

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

    type PairOfInt = int * int
    

    类型缩写在编译过程中被扩展和删除,并且执行 不会出现在 F# 声明的详细形式中,也不能出现在 在运行时引用或访问。

    【讨论】:

    • 简而言之,这意味着如果我的 F# 库将导出一个采用 SimpleType 的函数,那么 C# 被调用者只会看到一个字符串参数?
    • @prydain F# 也将其视为字符串,并且能够在需要字符串的任何地方使用 SimpleType。尝试使用单个案例联合 type SimpleType = SimpleType of stringfsharpforfunandprofit.com/posts/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2013-06-21
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多