Firstly, MethodBase.GetCurrentMethod() returns the current method , while you can use [CallerMemberName] , etc. to pass some information about the calling method to the current method.
The former is evaluated at runtime using reflection, which is relatively slow, while the latter is processed at compile time and is essentially inefficient. I really tested this in tests. Reflection will cost you about 20 microseconds each time, which can be very significant if called frequently, while the [Caller...] attributes are not measurable.
source share