我正在编写一个 ExceptionFactory 类,使用 System.Diagnostics.StackTrace
。
var trace = new StackTrace(1, true);
var frames = trace.GetFrames();
var method = frames[0].GetMethod();
现在,上课
class Base
{
public void Foo()
{
//Call ExceptionFactory from here
}
}
class A : Base {}
//...
var x = new A();
x.Foo();
method.DeclaringType
将返回 typeof(Base)
。但是,我需要 typeof(A)
。是否有可能以某种方式获得?
method.ReflectedType
也不起作用。
最佳答案
不,因为该方法实际上是在 Base
上声明的。只要该方法未被重写,无论您是在基类还是在派生类上查询它,您总是会获得该方法的相同 MethodInfo
实例。
但是为什么首先需要其他类型呢?您的问题可能有另一种解决方案,这就是我提出这个问题的原因。
关于c# - 是否可以从堆栈跟踪中获取实际类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850719/