在.net基类库中可以找到ThrowHelper模式。从本质上讲,它减少了每个方法的字节代码量。无论如何,我想知道是否有一个属性指令来阻止throw Helper中引起的错误停止在helper中。我希望调试器在调用行停止。即
ThrowHelper.ThrowAnException ()
而不是在ThrowAnException()中
ax6ht2ek1#
你也可以用attribute标记你的投掷方法:
class ThrowHelper { [DebuggerStepThrough] public static void Throw() { throw new InvalidOperationException(); } }
则调试器将不会输入此方法。
lg40wkob2#
你可以让helper方法实际上不抛出异常,只是创建它。堆栈跟踪将指向真实的方法中的throw语句,而不是ThrowHelper中的任何内容。
throw ThrowHelper.CreateAnException();
5uzkadbs3#
您可以通过使用[System.Diagnostics.StackTraceHidden]属性装饰方法或类来隐藏或排除堆栈跟踪中包含的方法。StackTraceHidden属性在.NET 6中引入。https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.stacktracehiddenattributeStackTraceHidden属性化的类型和方法将从StackTrace.ToString()和Exception.StackTrace中显示的堆栈跟踪文本中省略范例:
[System.Diagnostics.StackTraceHidden]
StackTraceHidden
[System.Diagnostics.StackTraceHidden] public static class Throw { public static T IfNull<T>( [NotNull] T obj, string? errorMessage) { return obj == null ? throw new Exception(errorMessage) : obj; } }
3条答案
按热度按时间ax6ht2ek1#
你也可以用attribute标记你的投掷方法:
则调试器将不会输入此方法。
lg40wkob2#
你可以让helper方法实际上不抛出异常,只是创建它。堆栈跟踪将指向真实的方法中的throw语句,而不是ThrowHelper中的任何内容。
5uzkadbs3#
您可以通过使用
[System.Diagnostics.StackTraceHidden]
属性装饰方法或类来隐藏或排除堆栈跟踪中包含的方法。StackTraceHidden
属性在.NET 6中引入。https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.stacktracehiddenattribute
StackTraceHidden属性化的类型和方法将从StackTrace.ToString()和Exception.StackTrace中显示的堆栈跟踪文本中省略
范例: