我在尝试反映F#中的泛型参数时遇到了问题。我想将两种类型传递给一个函数:第一种是我想要在另一种类型中实现的类型(这是第二个参数)。
当我在C#中执行此操作时,我得到了所需的结果。但是,当我在F#中这样做时,我得到Type.Name =" T"而不是" SomeType"。我已经把一个Gist放在一起,希望在C#和F#中展示我想要做的事情(它只是一个linqpad样本来展示我尝试做的事情):{{3} }
为什么是.GetGenericArguments的结果。[0] .Name =" T"而不是" MySample2" (这是C#输出的内容)?
答案 0 :(得分:0)
看起来我犯了使用" typedefof<>"的错误而不是" typeof<>"。相应地更新了要点。
扩展上述内容:
调用函数" typeImplements"我传递的是typedefof>。我不知道在询问封闭类型时(在这种情况下是MySample2),typedefof不包含泛型类型(' T)。因此,如果您想获得通用的实际类型,则需要使用typeof>。这篇博文解释了我的不同之处:http://phosphor-escence.blogspot.com/2013/05/difference-between-typeof-and-typedefof.html
在:
typeImplements typedefof<MySample2> typedefof<MySample1<MySample2>> |> Dump
之后:typeImplements typeof<MySample2> typeof<MySample1<MySample2>> |> Dump