FSharp GetGenericArguments()。[0] .Name返回T而不是实际的类型名称

时间:2014-04-24 18:10:18

标签: f# system.reflection

我在尝试反映F#中的泛型参数时遇到了问题。我想将两种类型传递给一个函数:第一种是我想要在另一种类型中实现的类型(这是第二个参数)。

当我在C#中执行此操作时,我得到了所需的结果。但是,当我在F#中这样做时,我得到Type.Name =" T"而不是" SomeType"。我已经把一个Gist放在一起,希望在C#和F#中展示我想要做的事情(它只是一个linqpad样本来展示我尝试做的事情):{{3} }

为什么是.GetGenericArguments的结果。[0] .Name =" T"而不是" MySample2" (这是C#输出的内容)?

1 个答案:

答案 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