从 F# 实例化 C# 9 记录

Instantiating C# 9 Records from F#

如果我定义了 C# 9 记录:

public record Reading
{
    public long Timestamp { get; init; }
    public float TemperatureCelsius { get; init; }
}

如何从 F# (5.01) 实例化它?

let newReading () =
   // ???

感觉应该很简单,但是我好像做不到。

我创建了两个项目,都使用 .NET Core 5.0:

  • CSharpProj:C# 9 class 库
  • FSharpProj:F# 5 控制台应用程序

从 F# 实例化 C# 记录对我来说工作正常,如果我把它当作普通 class 类型:

open CSharpProj
let reading = Reading()

但是,我无法从 F# 成功设置 TimestampTemperatureCelsius。看起来像 F# doesn't understand C# init setters yet。以下尝试编译正常:

let reading = Reading(Timestamp = 1L, TemperatureCelsius = 1.0f)

但在运行时生成 InvalidProgramException。我假设 F# 团队会在某个时候解决这个问题。同时,作为变通方法,我将 C# 记录类型更改为:

public record Reading(long Timestamp, float TemperatureCelsius)
{
}

现在来自 F# 的相同调用成功设置了这两个属性。