不能将F#类型用作C#函数参数
我在我的F#库中得到了以下类型(相同的文件和名称空间): 这个库是作为C#项目中的引用添加的,我想创建一个以“HFile”为参数的函数 问题在于以下概要不起作用:不能将F#类型用作C#函数参数,f#,F#,我在我的F#库中得到了以下类型(相同的文件和名称空间): 这个库是作为C#项目中的引用添加的,我想创建一个以“HFile”为参数的函数 问题在于以下概要不起作用: public void LoadFromTemplate(HFile template) 但是这个起作用了: public void LoadFromTemplate(FSharpList<HPart> template) public void LoadFromTemplate(FSharpList模板) 我不明白
public void LoadFromTemplate(HFile template)
但是这个起作用了:
public void LoadFromTemplate(FSharpList<HPart> template)
public void LoadFromTemplate(FSharpList模板)
我不明白为什么第一个例子不起作用。当我开始编写Intellisense时,它甚至没有在完成列表中显示“HFile”
我认为HFile将与FSharpList
HFile
是一个F#。在F#中,这意味着类型HFile
与HPart list
完全相同。这意味着无论你在哪里使用F#侧的一个,你也可以使用另一个
遗憾的是,类型缩写在.NETIL中没有任何直接表示,因此F#编译它们就像F#编译器理解的元数据一样。这意味着类型HFile
实际上并不作为.NET和C#视图中的类型存在
您可以在F#中将其定义为一个实类型,例如使用单个构造函数的简单区分并集:
type HFile = HFile of HPart list
或者,您可以使用在C中定义一个C风格的类型别名。这需要完整路径,并且必须位于要使用HFile
的每个文件中:
using HFile = Microsoft.FSharp.FSharpList<YourFSharpNamespace.HPart>;
使用HFile=Microsoft.FSharp.FSharpList;
using HFile = Microsoft.FSharp.FSharpList<YourFSharpNamespace.HPart>;