有可能将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测试)
这可能是最简单的解决方案