Where were I? (StackTrace Class)

On my current
project we wished to impersonate a WebService for test purposes and decided to record
live messages using XmlSerialization. For the first few messages I manually implemented
code to serialize to a file. This cut-and-paste reuse obviously had to be refactored
but I was unhappy manually passing in the filename to every call of the new method
since the files are named the same as the webmethod. Somehow the generic serialization
code needed to know who called it, or to put it in Jerry’s terms it had to ask ‘Were
were I?’. Jerry replied
to my first ever blog post and finally I got a chance to use his suggestion:

The crux is the
StackTrace class which resides in the System.Diagnostics namespace. It is exactly
as you might expect – very simple when you know it exists but I believe it would be
hard to find using Google etc.

This is the code
snippet I used after re-reading Jerry’s Code Project article:

#region Get the
calling method (”Where were I” – courtesy of Jerry Dennany)
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
string methodName = “unknown”;
if (st.FrameCount > 0)
{
System.Diagnostics.StackFrame sf = st.GetFrame(1);
methodName = sf.GetMethod().Name;
}
#endregion

Being a stickler
for simplicity I read the MSDN help and reduced the code to:

#region Get the
calling method name (”Where were I” – courtesy of Jerry Dennany)
System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(1, false);
string methodName = st.GetFrame(0).GetMethod().Name;
#endregion

I am not sure
that my employer will be sending a Mr. Dennany a check anytime soon, but I appreciated
the helpful article. This is a good reminder of why we ‘waste’ so much time with blogs.

This entry was posted in Other. Bookmark the permalink.