从 C# 调用时将记录选项返回为 null

2023-12-29

是否有可能返回record option从 F# 到 C# 的值作为空值?我想将一些逻辑封装在 F# 程序集中,并尽可能多地隐藏在外观后面,“对 C# 来说更自然”。这是一些综合示例:

type Data = { DataField1: int; DataField2: string }

返回 C# 的代码如下所示:

type SomeFacade() =
    let data = Some { DataField1 = 1; DataField2 = "hello" }  

    member x.GetData() = if Option.isSome data then Option.get data else null

但不允许使用空值。

  • 我可以尝试使用[<AllowNullLiteral>]属性,但不能用于记录类型。
  • 我可以用Class代替Record但在 F# 内部使用它会更复杂,因为大部分工作应该在 F# 部分内完成。我喜欢通过复制另一个记录值来创建记录值的极其方便的方法with关键词。
  • 甚至可以使用Data作为 F# 程序集中的记录并将其转换为某个中间类DataClass当暴露于 C# 程序集时,但看起来很尴尬。

有什么解决办法吗? (我不会在 F# 代码中使用空值,但我想将空值返回给 C# 代码)。


对于记录类型,

Operators.Unchecked.defaultof<Data>

is null(刚刚使用 fsi 进行测试)

这可能是最简单的解决方案

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C# 调用时将记录选项返回为 null 的相关文章