15
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";
        }

    }
}

如何即时返回方法的完全限定名称?

4

2 回答 2

12

没有任何硬编码?可能是什么?

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是因为我假设在实际代码中您希望将该方法放在某个实用程序类中)

于 2012-10-17T05:53:34.483 回答
7

如果您使用的是 C# 5,则可以稍微简单地执行此操作,但这也可以:

var method = MethodBase.GetCurrentMethod();
var type = method.DeclaringType;
var fullName = string.Format("{0}.{1}", type.FullName, method.Name);

当然,这是假设该方法没有被覆盖。不幸的是,您当然不能将其放入实用程序方法中,否则当前方法就是实用程序方法。

你可以用它StackTrace来解决这个问题,但你需要小心内联 - 如果你创建一个实用方法,然后从一个本身内联的方法中调用它,你会得到你想要的方法的调用者:(

于 2012-10-17T05:55:24.460 回答