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
你可以看看ReflectedType
的MethodBase
你得到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)
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)
扩展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)
我想现在,最好这样做:
string fullMethodName = $"{typeof(MyClass).FullName}.{nameof(MyMethod)}";
Run Code Online (Sandbox Code Playgroud)
在 C# 6 中,您可以使用nameof
:
string myName = nameof(MyMethod);
Run Code Online (Sandbox Code Playgroud)