我在这里发现了类似的问题 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?
答案 0 :(得分:2)
如果您使用的是.NET 4.5,则可以使用属性:CallerMemberNameAttribute
public void MyMethod([CallerMemberName]string myCallerName = null)
{
//use myCallerName
}