c# - 是否可以从堆栈跟踪中获取实际类型?

标签 c# .net reflection stack-trace

我正在编写一个 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/

相关文章:

c# - MVC 中的动态下拉列表

c# - 为什么 C# 静态类可以包含非静态类/结构?

c# - WPF CroppedBitmap + RenderTargetBitmap = EventHandler 泄漏问题和 Freeze 问题

java - 在调用时使用Java函数注解来调用外部代码

c# - 尝试创建新类型时出现 InvalidProgramException

c# - 如何在 LinkBut​​ton 单击时将字符串传递给 ASP.Net 中的单击事件? C#

c# - 需要名字姓氏程序的帮助

.net - WinAPICodePack 中的 TaskDialog 在 .NET 4.0 上不起作用

c# - 如何创建 Windows 注册表观察器?

swift - 是否有 C#'s ' nameof()' 语句的 Swift 等价物?