I've a little problem with getting the caller for my extension method.
Searched the internet but couldn't find anything simular to my problem. This question was a close call...
I've a extension method :
public static void TabToNextField(this FrameworkElement i, FrameworkElement nextField)
{
i.KeyPress(Keys.Tab);
var isNextFieldFocused = nextField.GetProperty<bool>("IsFocused");
if (!isNextFieldFocused)
{
//Taborder is incorrect. Next field wasn't focused!
//This wont work since 'this' can't be used in a static context.
var currentProcedure = this.GetType().Name;
var fromField = i.AutomationId;
var toField = nextField.AutomationId;
//Log to file..
}
}
This is used for some automated tests to validate if the nextfield has focus and the tab order is correct. But for the error that should be logged i would like to get the Class name of the caller to get a accurate report that we can directly see where the error is in our application.
Since all the controls are using AutomationId the controls are easy to identify..
So the question is: How can i get the caller method from this extension method?
While CallerMemberName
is indeed handy, you can also use the StackTrace
class, which is avaiable in all framework versions.
LINQPad Example:
void Main()
{
"Test".Test();
}
static class Extensions
{
public static void Test(this string s)
{
var method = new StackTrace().GetFrame(1).GetMethod();
Console.WriteLine(String.Format("I was called from '{0}' of class '{1}'", method.Name, method.DeclaringType));
}
}
Output:
I was called from 'Main' of class 'UserQuery'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With