我是否可以将任何属性应用于样板方法,以便此类方法不会出现在堆栈跟踪中?我有很多它们,在某些情况下它们有几个层次。这只是混乱的事情。
示例代码:
class Program
{
public static void ThrowMe()
{
throw new NotImplementedException();
}
public static void HideMe()
{
ThrowMe();
}
static void Main(string[] args)
{
try
{
HideMe();
}
catch (Exception e)
{
}
}
}
这将抛出此堆栈跟踪:
在Spork.Program.ThrowMe()中的C:\ Projects \ XXX \ Testing Sandbox \ ConsoleTesting \ Program.cs:第58行
在Spork.Program.HideMe()中的C:\ Projects \ XXX \ Testing Sandbox \ ConsoleTesting \ Program.cs:第64行
在Spork.Program.Main(String [] args)中的C:\ Projects \ XXX \ Testing Sandbox \ ConsoleTesting \ Program.cs:第70行
答案 0 :(得分:7)
将Console.WriteLine(e)放入catch块。切换到发布版本并按Ctrl + F5。你会看到这个:
System.NotImplementedException: The method or operation is not implemented.
at ConsoleApplication1.Program.ThrowMe() in C:\Users\hpassant\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs:line 9
at ConsoleApplication1.Program.Main(String[] args) in C:\Users\hpassant\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs:line 17
请注意,HideMe()方法在堆栈跟踪中不可见。任务完成。
跟踪中未显示方法调用,因为 JIT优化器内联方法:这是隐藏堆栈跟踪中方法的唯一方法。
这不是你能控制好的东西,方法必须是'小'而不是自己抛出任何异常。否则通常认为这是一个问题,而不是一个功能。很难弄清楚如何从A到B进行编码。
答案 1 :(得分:5)
答案 2 :(得分:0)
如果您的方法不够简单以至于无法自动内联,则可以使用[MethodImpl(MethodImplOptions.AggressiveInlining)]
属性为编译器提供强烈的提示,以使其成为内置对象。
您仍然必须以发布模式进行编译。