如何将Method Name作为参数传递给函数?

时间:2014-09-23 11:34:52

标签: c# .net reflection

我在这里发现了类似的问题 How can I find the method that called the current method? 但是这个问题的答案也给出了我在第一个例子中提到的相同的结果

这是我正在使用的方法

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?

1 个答案:

答案 0 :(得分:2)

如果您使用的是.NET 4.5,则可以使用属性:CallerMemberNameAttribute

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