将内部区分联合的实例从 F# 初始化为 C#
Initialize instance of internal discriminated union from F# to C#
我有一个从 F# 中通过 dll 导出的可识别联合类型,用于 C#:
type Argument =
| IntValue
| FloatValue
| BoolValue of bool
在 C# 中,我可以初始化类似 Argument.NewBoolValue(true)
的东西,但其他两种类型 IntValue
和 FloatValue
不是通过 F# 编译器生成的类型,因此被标记为内部类型,是否存在一种在 C# 中初始化它们的方法?
如果被区分的联合案例没有任何有效负载,则不会生成 NewXXX
方法。因为这种联合案例的所有实例都是相同的,所以不需要创建函数。所以改用静态属性
Argument.IntValue
Argument.FloatValue
在内部,这些属性只是 return 相应用例的单例实例:
internal static readonly Argument _unique_IntValue = new _IntValue();
public static Argument IntValue => _unique_IntValue;
更多有趣的细节可以观察in this decompiled snippet。
我有一个从 F# 中通过 dll 导出的可识别联合类型,用于 C#:
type Argument =
| IntValue
| FloatValue
| BoolValue of bool
在 C# 中,我可以初始化类似 Argument.NewBoolValue(true)
的东西,但其他两种类型 IntValue
和 FloatValue
不是通过 F# 编译器生成的类型,因此被标记为内部类型,是否存在一种在 C# 中初始化它们的方法?
如果被区分的联合案例没有任何有效负载,则不会生成 NewXXX
方法。因为这种联合案例的所有实例都是相同的,所以不需要创建函数。所以改用静态属性
Argument.IntValue
Argument.FloatValue
在内部,这些属性只是 return 相应用例的单例实例:
internal static readonly Argument _unique_IntValue = new _IntValue();
public static Argument IntValue => _unique_IntValue;
更多有趣的细节可以观察in this decompiled snippet。