gpt4 book ai didi

c# - 如何获取传递给方法的泛型 Func 的方法名称

转载 作者:太空狗 更新时间:2023-10-29 18:16:09 24 4
gpt4 key购买 nike

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

方法签名

public IEnumerable<T> GetData<T>(Func<IEnumerable<T>> WebServiceCallback) 
where T : class
{
// either gets me '<LoadData>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(..) 等

最佳答案

您正在查看 lambda 表达式的名称(由编译器生成),而不是在 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()();
}

关于c# - 如何获取传递给方法的泛型 Func<T> 的方法名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20420404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com