Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C调用时将记录选项返回为null#_C#_F#_Null_Option_Record - Fatal编程技术网

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
    而不是
    Record
    ,但是在F#内部使用它会更复杂,因为大多数工作都应该在F#部分内部完成。我喜欢通过使用
    关键字复制另一个记录值来创建记录值的极其方便的方法
  • 甚至可以将
    数据
    用作F#程序集内的记录,并在暴露于C#程序集时将其转换为一些中间类
    数据类
    ,但这看起来很尴尬
有什么解决办法吗?(我不打算在F代码中使用空值,但我想将空值返回C代码)。

对于记录类型

Operators.Unchecked.defaultof<Data>
Operators.Unchecked.defaultof
is
null
(仅使用fsi测试)


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

返回选项类型有什么问题吗?没有。。。但我只是在一个只包含C项目的大型解决方案中使用F,我不想在F程序集之外看到对F太具体的类型,让我们称之为“隐藏实现细节”。可以看到它们,但如果看不到就更好了。我们还没有使用F#,所以我不想让我的同事们被“未知”编程语言吓到:)是的,先生。它对Mercurial的采用起到了作用,因此也许它将与F#other:一起使用。)