沉默的特定例外

问题描述 投票:0回答:1

我有很多 throw new NotImplementedExceptions() 贯穿我的整个应用程序。现在我想让它们安静下来,并显示一个自定义的消息对话框。

为了捕捉它们,我正在使用。

AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
     if(eventArgs.Exception is NotImplementedException) {
        return;
     }
}

但问题是,异常还是会被抛出。

当我在这段代码中捕捉到这种类型的异常时,我怎样才能使抛出的异常保持沉默?

c# exception appdomain
1个回答
1
投票

听起来你想做的是当一个你没有实现的方法被调用时,做一些比爆炸更好的事情。 我不相信这在使用 AppDomain.FirstChanceException 或相关的 UnhandledException. 有一个 答得好 中谈到了为什么简单地抑制异常是不可取的。

你可以做的是,除了引发异常之外,还可以使用其他方法来标记方法未实现,比如当你还没有实现某些东西的时候,调用一个显示你的消息的帮助程序。 你可以使用 #if 务实主义还是实用主义 ConditionalAttribute 来切换到在非DEBUG构建中实际抛出异常,如果这是可取的。 反正使用帮助程序来抛出异常也不是什么稀奇的事 (例如参见 ThrowHelper 在BCL,或 Throw 在我自己的一个项目中),因为避免使用 throws.

这将是这样的。

public void UnImplementedMethod()
{
  // rather than "throw new NotImplementedException("some message")"
  MyHelper.NotImplemented("some message");
}

// .... 

static class MyHelper
{
  [Conditional("DEBUG")]  
  public static void NotImplemented(string msg)
  {
#if DEBUG // can use whatever configuration parameter
      MessageBox.Show("Not Implemented: "+ msg);
#else
      throw new NotImplementedException(msg);
#endif
  }
}

你可以使用通用参数来处理那些有非void返回的未实现的方法 尽管你必须决定如果你不抛出异常的话,实际返回什么。 有了这个模式,你可以做任何你想做的事情,而且还能很容易地找到没有被实现的地方。

© www.soinside.com 2019 - 2024. All rights reserved.