抑制某些类型异常的属性?

发布于 2025-01-08 21:24:13 字数 231 浏览 0 评论 0原文

我可以使用附加到方法定义的任何属性来抑制源自该方法的某种类型的任何异常吗?例如

[SuppressException(typeof(TimeoutException))]
public void TroubleMethod()
{

}

,那么当存在TimeoutException时,它不会抛出TroubleMethod之外?

Is there any attribute that I can use, attached to the method definition, that will suppress any exceptions of a certain type originating in that method? e.g.

[SuppressException(typeof(TimeoutException))]
public void TroubleMethod()
{

}

So when there is a TimeoutException, it won't throw outside of TroubleMethod?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

卖梦商人 2025-01-15 21:24:13

您可以在整个方法中使用异常处理:

public void TroubleMethod()
{
    try {
        // ...
    } catch(TimeoutException) {
        // Throw away
    }
}

不过,我认为不存在执行您所描述的操作的属性。如果您希望调试器单步执行您的方法,您始终可以使用[System.Diagnostics.DebuggerStepThrough()],但至于抑制异常,我认为这是不可能的。

You can use exception handling around the entire method:

public void TroubleMethod()
{
    try {
        // ...
    } catch(TimeoutException) {
        // Throw away
    }
}

I don't think an attribute that does what you describe exists, though. If you want the debugger to step through your method, you can always use [System.Diagnostics.DebuggerStepThrough()], but as for suppressing exceptions, I don't think that's possible.

就此别过 2025-01-15 21:24:13

您可以使用 PostSharp 进行一些棘手的检测来添加此类属性。

You can use PostSharp to do some tricky instrumentation to add such attribute.

最初的梦 2025-01-15 21:24:13

如果您确实想这样做,您可以使用以下方法更接近类似属性的语法:

static void SuppressException<TException>(Action a) where TException : Exception
{
    try
    {
        a();
    }
    catch (TException) { }
}

 public void TroubleMethod()
 {
     SuppressException<TimeoutException>(() => {
     ...
     }
 }

If you really want to do this, you can get a bit closer to your attribute-like syntax with:

static void SuppressException<TException>(Action a) where TException : Exception
{
    try
    {
        a();
    }
    catch (TException) { }
}

 public void TroubleMethod()
 {
     SuppressException<TimeoutException>(() => {
     ...
     }
 }
遮了一弯 2025-01-15 21:24:13

据我所知,但你总是可以这样做:

public void TroubleMethod()
{
    try
    {
        // silly code goes here
    }
    catch() { }
}

在几乎所有情况下都是一个坏主意,尽管有时可以接受(很少见)。请确保为未来的维护者(包括您)留下评论。

Not that I am aware of, but you can always do this:

public void TroubleMethod()
{
    try
    {
        // silly code goes here
    }
    catch() { }
}

A bad idea in almost all circumstances, though sometimes acceptable (rare). Just make sure to leave a comment for future maintainers (this includes you).

无声静候 2025-01-15 21:24:13

您可以使用 try-catch 捕获异常并忽略它,或者更好的是您可以响应该异常
查看参考

you could use try-catch to catch the exeptions and just ignore it or better you could respond to that exeption
check out the reference

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文