如果我定义了 C# 9 记录:
public record Reading
{
public long Timestamp { get; init; }
public float TemperatureCelsius { get; init; }
}
Run Code Online (Sandbox Code Playgroud)
如何从 F# (5.01) 实例化它?
let newReading () =
// ???
Run Code Online (Sandbox Code Playgroud)
感觉应该很简单,但我似乎无法让它发挥作用。
我创建了两个项目,都使用 .NET Core 5.0:
如果我像普通类类型一样对待它,从 F# 实例化 C# 记录对我来说效果很好:
open CSharpProj
let reading = Reading()
Run Code Online (Sandbox Code Playgroud)
但是,我无法从 F#Timestamp或成功设置TemperatureCelsius。看来F# 还不理解 C# 的 init setter。以下尝试编译良好:
let reading = Reading(Timestamp = 1L, TemperatureCelsius = 1.0f)
Run Code Online (Sandbox Code Playgroud)
但InvalidProgramException在运行时生成一个。我认为 F# 团队会在某个时候解决这个问题。同时,作为解决方法,我将 C# 记录类型更改为:
public record Reading(long Timestamp, float TemperatureCelsius)
{
}
Run Code Online (Sandbox Code Playgroud)
现在,F# 中的相同调用成功设置了这两个属性。