是否有可能将F#中的record option
值作为空值返回给C#?我想在F#程序集中封装一些逻辑,并尽可能地隐藏在Facade后面“对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
但不允许使用null值。
[<AllowNullLiteral>]
属性,但不能在记录类型上使用。Class
而不是Record
但是在F#中使用它会更复杂,因为大多数工作应该在F#部分内完成。我喜欢使用with
关键字复制另一个记录值来创建记录值的极其方便的方法。Data
作为记录,并在暴露给C#程序集时将其转换为某个中间类DataClass
,但它看起来很尴尬。 有什么解决方案吗? (我不会在F#代码中使用空值,但我想将空值返回给C#代码。)
答案 0 :(得分:6)
对于记录类型,
Operators.Unchecked.defaultof<Data>
是null
(刚刚使用fsi测试)
这可能是最简单的解决方案