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 に答える