c# - 将内部可区分联合的实例从 F# 初始化为 C#
问题描述
我有一个通过 F# 中的 dll 导出的可区分联合类型,以在 C# 中使用:
type Argument =
| IntValue
| FloatValue
| BoolValue of bool
在 C# 中,我可以初始化类似的东西Argument.NewBoolValue(true)
,但其他两种类型不是通过 F# 编译器生成的类型,因此被标记为内部,有没有办法在 C# 中初始化它们IntValue
?FloatValue
解决方案
如果已区分的联合案例没有任何有效负载,则不会NewXXX
生成任何方法。因为这种联合案例的所有实例都是相同的,并且不需要创建函数。所以改用静态属性
Argument.IntValue
Argument.FloatValue
在内部,这些属性只返回相应用例的单例实例:
internal static readonly Argument _unique_IntValue = new _IntValue();
public static Argument IntValue => _unique_IntValue;
在这个反编译的代码片段中可以观察到更多有趣的细节。
推荐阅读
- php - 如何将内联 css 从一个文件中的函数传递到另一个文件中的 head 标签中的函数
- python - 将 JSON 加载到 Pandas 数据框时保留列顺序
- eclipse - 如何通过 Maven 配置文件选择根上下文
- configuration-files - 我无法使用命令行运行 odoo(编辑)
- javascript - 如何创建一个默认返回值但也有扩展方法的方法?
- bash - bash字符串内的shell变量扩展
- ansible - Ansible 连接到存储在变量中的主机
- php - 将 php 数据绘制到 Highmap 中:HighCharts
- arrays - 如何设置状态(数组)并验证使用循环添加的多个 TextInputs - 反应原生
- excel - 用于查找特定类别的差异总和的公式