Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
Generics 将C#转换为F时协方差通用输出参数的语法#_Generics_F#_Type Parameter - Fatal编程技术网

Generics 将C#转换为F时协方差通用输出参数的语法#

Generics 将C#转换为F时协方差通用输出参数的语法#,generics,f#,type-parameter,Generics,F#,Type Parameter,我正在将一些旧的C#代码转换为我们的F#项目,这进行得非常顺利,除了我有一个在C#中定义的接口类型,就像使用out T泛型类型约束一样,正如所指出的,这是: 公共接口IFoo 其中T:IBar { T复制(); } 这怎么能翻译成F#?(请参阅编辑历史,了解我以前在代码中的尝试,但TeaDrivenDev已经向我表明,基于对C#的out)的误解,这些尝试是徒劳和无关的。我不确定我在这里得到了所有信息,但C#中的out,泛型类型参数与协变/逆变有关(据我所知,F#不支持协变),在通过引用传递的意

我正在将一些旧的C#代码转换为我们的F#项目,这进行得非常顺利,除了我有一个在C#中定义的接口类型,就像使用
out T
泛型类型约束一样,正如所指出的,这是:

公共接口IFoo
其中T:IBar
{
T复制();
}

这怎么能翻译成F#?(请参阅编辑历史,了解我以前在代码中的尝试,但TeaDrivenDev已经向我表明,基于对C#的
out
)的误解,这些尝试是徒劳和无关的。

我不确定我在这里得到了所有信息,但C#中的
out
,泛型类型参数与协变/逆变有关(据我所知,F#不支持协变),在通过引用传递的意义上,与
out
参数完全无关。
out
是C#中的上下文关键字,具有两个不相关的含义。这里记录了您在代码中遇到的协方差的
out
通用修饰符:哎哟,我是罪魁祸首。我不知道。这就是如果你的头长时间处于F#,我的C#就会生锈。你完全正确。好的,我应该更新我关于协方差的问题。谢谢你让我保持诚实:)。有人建议将其作为f#的一部分,我认为这可能是相关的。你的代码库中有多少地方会受到影响?添加一些显式强制转换的代码是否太多?(我怀疑该功能的使用非常罕见,以至于在添加到C#编译器之前,它需要进行一些语言修改。)
public interface IFoo<out T>
    where T: IBar
{
    T Copy();
}