Have browsed, searched and hoped but cannot find a straight answer.
Is there anyway in C# 6.0 to get the current method name using nameof
withouth specifying the method name?
I am adding my test results to a dictionary like this:
Results.Add(nameof(Process_AddingTwoConsents_ThreeExpectedRowsAreWrittenToStream), result);
I would prefer if I would not have to specify the method name explicitly so I can copy+paste the line, a non-working example:
Results.Add(nameof(this.GetExecutingMethod()), result);
If possible I do not want to use Reflection.
UPDATE
This is not (as suggested) a duplicate of this question . I am asking if is explicitly possible to make use of nameof
without(!) reflection to get the current method name.
You can't use nameof
to achieve that, but how about this workaround:
The below uses no direct reflection (just like nameof
) and no explicit method name.
Results.Add(GetCaller(), result);
public static string GetCaller([CallerMemberName] string caller = null)
{
return caller;
}
GetCaller
returns the name of any method that calls it.
Building on user3185569's great answer:
public static string GetMethodName(this object type, [CallerMemberName] string caller = null)
{
return type.GetType().FullName + "." + caller;
}
Results in you being able to call this.GetMethodName()
anywhere to return the fully qualified method name.
Same as others, but some variation:
/// <summary>
/// Returns the caller method name.
/// </summary>
/// <param name="type"></param>
/// <param name="caller"></param>
/// <param name="fullName">if true returns the fully qualified name of the type, including its namespace but not its assembly.</param>
/// <returns></returns>
public static string GetMethodName(this object type, [CallerMemberName] string caller = null, bool fullName = false)
{
if (type == null) throw new ArgumentNullException(nameof(type));
var name = fullName ? type.GetType().FullName : type.GetType().Name;
return $"{name}.{caller}()";
}
Allows to call it like this:
Log.Debug($"Enter {this.GetMethodName()}...");
If you want to add the name of the current method into the Results List then you may use this :
StackTrace sTrace= new StackTrace();
StackFrame sFrame= sTrace.GetFrame(0);
MethodBase currentMethodName = sFrame.GetMethod();
Results.Add(currentMethodName.Name, result);
Or you can use,
Results.Add(new StackTrace().GetFrame(0).GetMethod().Name, result);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.