从 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# 成功设置 Timestamp
或 TemperatureCelsius
。看起来像 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# 的相同调用成功设置了这两个属性。
如果我定义了 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# 成功设置 Timestamp
或 TemperatureCelsius
。看起来像 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# 的相同调用成功设置了这两个属性。