我创建了两个控制台应用程序,都针对.NET框架的4.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
类的"定义"时,我发现StackFrame
类的类声明中没有方法GetFrames
。mscorlib的两个程序集版本相同,即v4.0.0。
为什么?
在第一个示例中使用StackTrace
,但在第二个示例中则使用StackFrame
。
StackTrace有GetFrame()方法,但StackFrame没有。