Dmi*_*nov 4 c# null f# record option
是否有可能将record optionF#中的值返回到C#作为空值?我想在F#程序集中封装一些逻辑,并尽可能地隐藏在Facade后面"对C#更自然".这是一些合成的例子:
type Data = { DataField1: int; DataField2: string }
Run Code Online (Sandbox Code Playgroud)
返回C#的代码如下所示:
type SomeFacade() =
let data = Some { DataField1 = 1; DataField2 = "hello" }
member x.GetData() = if Option.isSome data then Option.get data else null
Run Code Online (Sandbox Code Playgroud)
但是不允许使用空值.
[<AllowNullLiteral>]属性,但它不能用于记录类型.Class而不是Record但在F#中使用它会更复杂,因为大多数工作应该在F#部分内完成.我喜欢通过使用with关键字复制另一个记录值来创建记录值的极其方便的方法.Data在F#程序集中使用它作为记录,并DataClass在暴露给C#程序集时将其转换为某个中间类,但它看起来很尴尬.有什么解决方案吗?(我不打算在F#代码中使用空值,但我想将空值返回给C#代码).
对于记录类型,
Operators.Unchecked.defaultof<Data>
Run Code Online (Sandbox Code Playgroud)
是null(刚刚使用fsi测试)
这可能是最简单的解决方案