I recently had to dynamically retrieve the name of the method that had thrown an exception. It turns out that this is really easy to do using Exception.TargetSite.Name. Here is a passing NUnit test to illustrate:
[TestFixture]
public class ExceptionBehaviour {
[Test]
public void TestGetMethodNameThrowingException() {
try {
new Something().MakeExceptionHappen();
} catch (Exception ex) {
Assert.That(ex.TargetSite.Name, Is.EqualTo("MakeExceptionHappen"));
}
}
private class Something {
public void MakeExceptionHappen() {
throw new NotImplementedException();
}
}
}
TargetSite returns a System.Reflection.MethodBase that has a number of interesting properties, like the type that threw the exception. Quite useful for logging.