如何获取传递给Method的Generic Func <T>的方法名称

 arthur 发布于 2023-02-12 14:59

我正在尝试使用.Net闭包将函数的方法名称传递给对象,如下所示:

方法签名

public IEnumerable GetData(Func> WebServiceCallback) 
where T : class    
{
    // either gets me 'b__3'
    var a = nrdsWebServiceCallback.Method.Name;
    var b = nrdsWebServiceCallback.GetInvocationList();

    return WebServiceCallback();
}

我这样称呼它:

SessionStateService.Labs = CacheManager.GetData(() =>  
WCFService.GetLabs(SessionStateService.var1, SessionStateService.var2));

看到'b__3'而不是WCFServce.GetLabs(..)等

1 个回答
  • 您现在看到的lambda表达式(编译器生成)的名称,而不是所谓的拉姆达内部的方法的名称.

    你必须使用<Expression<Func<T>>而不是Func<T>.表达式可以被解析和分析.

    尝试

    public IEnumerable<T> GetData<T>(Expression<Func<IEnumerable<T>>> callbackExpression) 
    where T : class    
    {
        var methodCall = callbackExpression.Body as MethodCallExpression;
        if(methodCall != null)
        {
            string methodName = methodCall.Method.Name;
        }
    
        return callbackExpression.Compile()();
    }
    

    2023-02-12 15:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有