使用System.Reflection获取方法的全名

Oni*_*ght 39 .net c# reflection

我有一个类似于以下的类:

public class MyClass
{

...

    protected void MyMethod()
    {
    ...
    string myName = System.Reflection.MethodBase.GetCurrentMethod.Name;
    ...
    }

...

}
Run Code Online (Sandbox Code Playgroud)

myName是"MyMethod".

有没有办法让我可以使用Reflection来myName取代"MyClass.MyMethod"的值?

Rub*_*ben 62

你可以看看ReflectedTypeMethodBase你得到GetCurrentMethod,即

MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
string methodName = method.Name;
string className = method.ReflectedType.Name;

string fullMethodName = className + "." + methodName;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,'ReflectedType'没有考虑到人们可能预期的运行时多态性. (2认同)

mms*_*mms 21

并使用参数获取完整的方法名称:

var method = System.Reflection.MethodBase.GetCurrentMethod();
var fullName = string.Format("{0}.{1}({2})", method.ReflectedType.FullName, method.Name, string.Join(",", method.GetParameters().Select(o => string.Format("{0} {1}", o.ParameterType, o.Name)).ToArray()));
Run Code Online (Sandbox Code Playgroud)


Joa*_*Fdz 6

扩展Ruben,你可以得到这样的全名:

var info = System.Reflection.MethodBase.GetCurrentMethod();
var result = string.Format(
                 "{0}.{1}.{2}()",
                 info.ReflectedType.Namespace,
                 info.ReflectedType.Name,
                 info.Name);
Run Code Online (Sandbox Code Playgroud)

您可以将其添加到接收MethodBase参数的静态方法并生成字符串.


小智 6

你可以这样得到全名:

var fullMethodName = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;
Run Code Online (Sandbox Code Playgroud)


Pet*_*tas 6

我想现在,最好这样做:

string fullMethodName = $"{typeof(MyClass).FullName}.{nameof(MyMethod)}";
Run Code Online (Sandbox Code Playgroud)

  • 一直在寻找这个,以便我可以记录合格的名字,这是我最终采用的方法.仅仅因为它小而简单并且能够满足我的需求. (2认同)

Sal*_*lar 5

在 C# 6 中,您可以使用nameof

string myName = nameof(MyMethod);
Run Code Online (Sandbox Code Playgroud)

  • 是的,但只返回名称,而不返回全名。在给出的示例中,它返回字符串“MyMethod”,而不是“MyClass.MyMethod”。 (2认同)