如何获取作为函数参数传递的方法名称

本文关键字:参数传递 函数 方法 何获取 获取 | 更新日期: 2023-09-27 18:24:06

我在这里发现了一个类似的问题如何找到调用当前方法的方法?但这个问题的答案也给出了与我在第一个例子中提到的相同的结果

这是我使用的方法

public class iStore
    {
        public T GetSiteCacheValueByFunc<T>(Func<T> func) where T : class
        {
            var methodName = func.Method.Name;
        }
    }

在这里,我使用以下代码使用iStore.GetSiteCacheValueByFunc,我得到methodName <Index>b_2,而我应该得到GetAllLanguages

 public ActionResult Index()
    {
        var site = BusinessLogic.Caching.iStore;
        var languages = site.GetSiteCacheValueByFunc<IEnumerable<Language>>(() =>  LanguageManager.GetAllLanguages());
    }

如果我使用以下代码,我会得到正确的methodName GetAllLanguages,但这样我就无法将参数传递给GetAllLanguages方法

public ActionResult Index()
{
    var site = BusinessLogic.Caching.iStore;
    var languages = site.GetSiteCacheValueByFunc<IEnumerable<Language>>(LanguageManager.GetAllLanguages);
}

我哪里做错了?以及如何获得正确的methodName?

如何获取作为函数参数传递的方法名称

如果使用.NET 4.5,则可以使用一个属性:CallerMemberNameAttribute

public void MyMethod([CallerMemberName]string myCallerName = null)
{
  //use myCallerName
}