[英]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.