繁体   English   中英

在F#中将MethodBase转换为RuntimeMethodInfo

[英]Cast MethodBase to RuntimeMethodInfo in F#

我想将MethodBase强制转换为RuntimeMethodInfo以便检索反射方法的参数的名称和类型,以及这些方法的返回类型。

我可以在“中间窗口”中进行直接转换,但是还没有找到使用F#进行转换的方法。

为什么要投? 您可以在MethodBase参考上调用GetParameters()以及所需的所有其他成员。

let methodInfo : MethodBase = //whatever
let firstParamName = methodInfo.GetParameters().[0].Name

编辑(返回类型):

首先,请注意,GetMethod返回的是MethodInfo,而不是MethodBase。 您不能转换为RuntimeMethodInfo,因为正如其他人所指出的那样,这是一种内部类型。 但是ReturnType属性是在MethodInfo上声明的,所以一切都很好。

因此,这是有效的,其中methodInfo的静态类型为MethodInfo:

let methodInfo = typeof<object>.GetMethod("ToString")
let returnTypeName = methodInfo.ReturnType.Name // "String"

其次,如果您拥有对MethodBase的静态引用(您知道它是MethodInfo),则使用:?>运算符。 例:

let toMethodInfo (mb : MethodBase) = mb :?> MethodInfo

另一方面,如果不确定对象的实际类型,则可以使用match

let tryToMethodInfo (mb : MethodBase) =
    match mb with
    | :? MethodInfo as result -> Some result
    | _ -> None

最后,由于您在评论中询问“反之亦然”:当您从派生类转到其始终成功的基类之一时,不需要问号:

let toMethodBase (mi : MethodInfo) = mi :> MethodBase

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM