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



有可能将F#到C#的record option值作为null值返回吗?我想在F#汇编中封装一些逻辑,并尽可能多地隐藏在"对C#来说更自然"的facade后面。下面是一些合成的例子:

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

但不允许使用null值。

  • 我可以尝试使用[<AllowNullLiteral>]属性,但它不能用于记录类型
  • 我可以使用Class而不是Record,但在F#中使用它会更复杂,因为大多数工作都应该在F#部分中完成。我喜欢通过使用with关键字复制另一个记录值来创建记录值的非常方便的方法
  • 甚至可以在F#程序集中使用Data作为记录,并在向C#程序集公开时将其转换为一些中间类DataClass,但这看起来很尴尬

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

对于记录类型,

Operators.Unchecked.defaultof<Data>

null(刚刚使用fsi测试)

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

最新更新