繁体   English   中英

将内部可区分联合的实例从 F# 初始化为 C#

[英]Initialize instance of internal discriminated union from F# to C#

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

type Argument =
  | IntValue
  | FloatValue
  | BoolValue of bool

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

如果判别联合案例没有任何有效载荷,则不会生成NewXXX方法。 因为这种联合案例的所有实例都是相同的,并且不需要创建 function。 所以改用静态属性

Argument.IntValue
Argument.FloatValue

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

internal static readonly Argument _unique_IntValue = new _IntValue();

public static Argument IntValue => _unique_IntValue;

在这个反编译的代码片段中可以观察到更多有趣的细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM