有没有返回当前类/方法名称的函数?

在C#中,是否有一个返回当前类/方法名称的函数?

当前class级名称:

this.GetType().Name; 

当前方法名称:

 using System.Reflection; // ... MethodBase.GetCurrentMethod().Name; 

由于您正在将其用于日志logging目的,因此您可能也有兴趣获取当前的堆栈跟踪 。

System.Reflection.MethodBase.GetCurrentMethod()

 System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 

我把上面的例子改成了这个实例代码:

 public class MethodLogger : IDisposable { public MethodLogger(MethodBase methodBase) { m_methodName = methodBase.DeclaringType.Name + "." + methodBase.Name; Console.WriteLine("{0} enter", m_methodName); } public void Dispose() { Console.WriteLine("{0} leave", m_methodName); } private string m_methodName; } class Program { void FooBar() { using (new MethodLogger(MethodBase.GetCurrentMethod())) { // Write your stuff here } } } 

输出:

 Program.FooBar enter Program.FooBar leave 

是! MethodBase类的静态GetCurrentMethod将检查调用代码以查看它是一个构造函数还是一个常规方法,并返回一个MethodInfo或一个ConstructorInfo。

这个命名空间是reflectionAPI的一部分,所以你可以基本上发现运行时可以看到的所有东西。

在这里您可以find关于API的详尽描述:

http://msdn.microsoft.com/en-us/library/system.reflection.aspx

如果你不想看整个图书馆,这是我捏造的一个例子:

 namespace Canvas { class Program { static void Main(string[] args) { Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod()); DiscreteMathOperations viola = new DiscreteMathOperations(); int resultOfSummation = 0; resultOfSummation = viola.ConsecutiveIntegerSummation(1, 100); Console.WriteLine(resultOfSummation); } } public class DiscreteMathOperations { public int ConsecutiveIntegerSummation(int startingNumber, int endingNumber) { Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod()); int result = 0; result = (startingNumber * (endingNumber + 1)) / 2; return result; } } } 

这个代码的输出是:

 Void Main<System.String[]> // Call to GetCurrentMethod() from Main. Int32 ConsecutiveIntegerSummation<Int32, Int32> //Call from summation method. 50 // Result of summation. 

希望我帮助你!

JAL

你可以得到当前的类名,但我不能想到得到当前的方法名。 但是,可以获得当前方法的名称。

 string className = this.GetType().FullName; System.Reflection.MethodInfo[] methods = this.GetType().GetMethods(); foreach (var method in methods) Console.WriteLine(method.Name);