微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将内部判别联合的实例从 F# 初始化为 C#

如何解决将内部判别联合的实例从 F# 初始化为 C#

我有一个通过 dll 从 F# 导出的可区分联合类型,用于 C#:

type Argument =
  | IntValue
  | FloatValue
  | BoolValue of bool

在 C# 中,我可以初始化类似 Argument.NewBoolValue(true) 的东西,但其他两种类型 IntValueFloatValue 不是通过 F# 编译器生成的类型,因此标记为内部,有没有办法在 C# 中初始化它们?

解决方法

如果被区分的联合案例没有任何有效负载,则不会生成 NewXXX 方法。因为这种联合情况的所有实例都是相同的,并且不需要创建功能。所以改用静态属性

Argument.IntValue
Argument.FloatValue

在内部,这些属性只返回相应用例的单例实例:

internal static readonly Argument _unique_IntValue = new _IntValue();

public static Argument IntValue => _unique_IntValue;

可以观察到更多有趣的细节in this decompiled snippet

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。