using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcMusicStore.Controllers
{
public class StoreController : Controller
{
//
// GET: /Store/
public string Index()
{
return "MvcMusicsStore.Controllers.StoreController.Index";
}
}
}
如何动态返回方法的完全限定名称?
答案 0 :(得分:10)
没有任何硬编码?还是喜欢什么?
public string Index()
{
return GetType().FullName + GetMemberName();
}
static string GetMemberName([CallerMemberName] string memberName = "")
{
return memberName;
}
或许更漂亮:
public string Index()
{
return GetMemberName(this);
}
static string GetMemberName(
object caller, [CallerMemberName] string memberName = "")
{
return caller.GetType().FullName + "." + memberName;
}
(我使用static
,因为我假设在实际代码中你想把方法放在某个实用程序类中)
答案 1 :(得分:5)
如果你正在使用C#5,你可以稍微简单地做到这一点,但这也有效:
var method = MethodBase.GetCurrentMethod();
var type = method.DeclaringType;
var fullName = string.Format("{0}.{1}", type.FullName, method.Name);
当然,假设该方法没有被覆盖。不幸的是,你当然不能将它放入实用方法中,否则当前的方法就是实用方法。
你可以使用StackTrace
来解决这个问题,但你需要小心内联 - 如果你创建一个实用工具方法,然后从一个本身内联的方法中调用它,你将得到<你想要的方法的em> caller :(