C# 从C调用时将记录选项返回为null#
是否有可能将C# 从C调用时将记录选项返回为null#,c#,f#,null,option,record,C#,F#,Null,Option,Record,是否有可能将record option值从F#返回到C#作为空值?我想在F#assembly中封装一些逻辑,并尽可能多地隐藏在facade后面,使其“对C#更自然”。下面是一些合成示例: type Data = { DataField1: int; DataField2: string } 返回C#的代码如下所示: type SomeFacade() = let data = Some { DataField1 = 1; DataField2 = "hello" } me
record option
值从F#返回到C#作为空值?我想在F#assembly中封装一些逻辑,并尽可能多地隐藏在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
但不允许使用空值
- 我可以尝试使用
属性,但它不能用于记录类型[]
- 我可以使用
而不是Class
,但是在F#内部使用它会更复杂,因为大多数工作都应该在F#部分内部完成。我喜欢通过使用Record
关键字复制另一个记录值来创建记录值的极其方便的方法和
- 甚至可以将
用作F#程序集内的记录,并在暴露于C#程序集时将其转换为一些中间类数据
,但这看起来很尴尬李>数据类
Operators.Unchecked.defaultof<Data>
Operators.Unchecked.defaultof
isnull
(仅使用fsi测试)
这可能是最简单的解决方案返回选项类型有什么问题吗?没有。。。但我只是在一个只包含C项目的大型解决方案中使用F,我不想在F程序集之外看到对F太具体的类型,让我们称之为“隐藏实现细节”。可以看到它们,但如果看不到就更好了。我们还没有使用F#,所以我不想让我的同事们被“未知”编程语言吓到:)是的,先生。它对Mercurial的采用起到了作用,因此也许它将与F#other:一起使用。)