在C#中,您可以使用来获取方法的名称
nameof(ISomeClass.SomeMethod)
这在F#中可行吗?尝试点入ISomeClass以获取SomeMethod时,它只说“ SomeMethod不是静态方法”
答案 0 :(得分:3)
您可以基于F#报价创建一种以类型安全的方式检索接口方法的方法。
open FSharp.Quotations
open FSharp.Quotations.Patterns
let getMethodName (e: Expr<'T -> 'U>) =
match e with
| Lambda (_, Call (_, mi, _)) -> mi.Name
| _ -> failwith "%A is not a valid getMethodName expression, expected Lamba(_ Call(_, _, _))"
type ISomeInterface =
interface
abstract SomeMethod: unit -> unit
end
[<EntryPoint>]
let main argv =
let name = <@ fun (i : ISomeInterface) -> i.SomeMethod () @> |> getMethodName
printfn "%s" name
0