C# · 12月 25, 2021

c# – 将方法的名称作为参数传递

private void Method1(){ //Do something Log(“Something”,”Method1″);}private void Method2(){ //Do something Log(“Something”,”Method2″);}private void Log(string message,string method){ //Write to a log file Trace.TraceInformation(message + “happened at ” + method);}

我有几个方法,如上面的Method1和Method2,我想有一些方法将方法的名称作为参数传递,而无需手动编辑代码.

那可能吗?

解决方法 Jon Skeet的优秀答案.

但是,如果您不使用.NET 4.5,则可以尝试反射.你怎么知道只有在绝对必要时才能使用反射.不要为了使用它而过度使用它.

回来,
你可以做点什么,

using System.Reflection; //include Reflection namespace Console.WriteLine(MethodBase.GetCurrentMethod().Name) //Get the method-name of the current method

在你的情况下,它会像下面,

private void Method1(){ //Do something Log(“Something”,System.Reflection.MethodBase.GetCurrentMethod().Name);}private void Method2(){ //Do something Log(“Something”,System.Reflection.MethodBase.GetCurrentMethod().Name);}private void Log(string message,string method){ //Write to a log file Trace.TraceInformation(message + “happened at ” + method);}

编辑:

根据@Jon Skeet的以下评论,如果你想要.Net 4.5那种花哨而又实用的实现,请查看Micrsoft.Bcl NUGET包.