【问题标题】:Initialize instance of internal discriminated union from F# to C#将内部可区分联合的实例从 F# 初始化为 C#
【发布时间】:2021-01-12 13:23:54
【问题描述】:

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

type Argument =
  | IntValue
  | FloatValue
  | BoolValue of bool

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

【问题讨论】:

  • 应该有Argument.IntValue和Argument.FloatValuestatic属性

标签: c# f# c#-to-f#


【解决方案1】:

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

Argument.IntValue
Argument.FloatValue

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

internal static readonly Argument _unique_IntValue = new _IntValue();

public static Argument IntValue => _unique_IntValue;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-30
    • 2022-08-15
    • 2018-04-25
    • 2014-09-13
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    相关资源
    最近更新 更多