我创建了两个控制台应用程序,都针对.NET框架的v4.5.2。
class MyDisposable : IDisposable
{
public void Dispose()
{
var callerName = new StackTrace().GetFrame(1)?.GetMethod()?.Name;
Console.WriteLine($"Dispose called by {callerName}.");
}
}
运行良好。
另一方面,我有以下内容,实际上是相同的。
return Disposable.Create(() =>
{
var stackFrame = new StackFrame();
var callingMethodBase = stackFrame.GetFrame(1)?.GetMethod();
...
});
但Visual Studio intellisense报告:
'StackFrame'不包含。的定义 'GetFrame'并没有扩展方法'GetFrame' 接受'StackFrame'类型的第一个参数 可以找到(你错过了使用 指令或程序集引用?)
当我在StackFrames
类上转到定义时,我发现GetFrames
类的类声明中没有方法StackFrame
。 mscorlib 的程序集版本都相同,即v4.0.0.0。
为什么?
答案 0 :(得分:2)
在第一个示例中,您使用的是StackTrace
,但在第二个示例中,您使用的是StackFrame
。
Stack Trace 的方法是GetFrame(),但Stack Frame 却没有。